“今日头条杯”首届湖北省大学程序设计竞赛 D. Who killed Cock Robin

本文介绍了一种使用树形动态规划解决特定问题的方法——计算一棵树的所有子树的总数。通过定义状态dp[u]表示以u为根节点的子树数量,并利用递归思想更新状态,最终得到整棵树的所有子树总数。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

D. Who killed Cock Robin

题目链接

题意:给出一颗树,求它的所有子树的总数。

思路:定义一个dp[],dp[u]是指以u为结点的子树的个数。

         可以推出:对于u所有的直接子节点v,dp[u]=dp[u]*(dp[v]+1);

         可以理解为(dp[v]+1)是在v结点形成的所有子树中加入一个u结点这样形成的一定含有u结点的子树总数。

#include<bits/stdc++.h>
using namespace std;
const int maxn = 200000 + 10;
const int INF=int(1e9);
const int mod=10000007;
#define ll long long
vector<int>edge[maxn];
bool vis[maxn];
ll dp[maxn];
void init(int n) {
	for(int i=0; i<=n; i++)
		edge[i].clear();
	memset(vis,0,sizeof(vis));

}
void dfs(int u) {
	vis[u]=true;
	dp[u]=1;
	for(int i=0; i<edge[u].size(); i++) {
		int v=edge[u][i];
		if(vis[v])
			continue;
		dfs(v);
		dp[u]=dp[u]*(dp[v]+1)%mod;
	}
	return;
}
int main() {
	int n;
	int u,v;
	scanf("%d",&n);
	init(n);
	for(int i=1; i<=n-1; i++) {
		scanf("%d %d",&u,&v);
		edge[u].push_back(v);
		edge[v].push_back(u);
	}
	dfs(1);
	ll ans=0;
	for(int i=1; i<=n; i++)
		ans=(ans+dp[i])%mod;
	printf("%lld\n",ans);
	return 0;
}

构建 `mmcv-full` 轮子时遇到终止错误可能由多种原因引起,包括但不限于硬件资源不足、依赖项缺失或配置不当等问。以下是针对该问的分析和解决方案: ### 可能的原因及解决方法 #### 1. **内存不足** 如果系统可用内存较低,在编译过程中可能会因内存耗尽而导致进程被杀死(killed)。 可以通过以下方式缓解此问: - 增加交换空间(swap space),以便在物理内存不足时提供额外的空间支持[^3]。 - 减少并行编译线程数。通常,默认情况下会使用多核处理器的最大性能来加速编译过程,但这也会增加内存消耗。可以尝试通过设置环境变量 `MAKEFLAGS=-jN` 来控制并发数量,其中 N 是希望使用的 CPU 核心数。 ```bash export MAKEFLAGS="-j4" pip install mmcv-full ``` #### 2. **CUDA 或 PyTorch 配置不匹配** `mmcv-full` 的安装需要与当前系统的 CUDA 和 PyTorch 版本兼容。如果不一致,则可能导致编译失败或其他运行时错误。建议先确认已安装的 PyTorch 和 CUDA 版本,并选择合适的预编译包或者手动指定版本进行安装[^4]。 验证命令如下: ```python import torch print(torch.__version__) print(torch.cuda.is_available()) ``` 对于特定组合下的安装指导,请访问官方文档页面获取最新推荐链接[^5]。 #### 3. **缺少必要的开发工具链** 某些 Linux 发行版上默认未安装完整的 C++ 编译器及相关库文件,这同样会造成无法成功创建 whl 文件的情况发生。因此需确保 GCC/G++ 已经正确部署完毕并且其版本满足最低需求标准之上;另外还需要注意 Python 开发头文件的存在与否——这些都属于基础性的前提条件之一[^6]。 更新软件包列表以及安装所需组件的例子如下所示: ```bash sudo apt-get update && sudo apt-get upgrade -y sudo apt-get install build-essential cmake git libgtk2.0-dev pkg-config python-pip python-setuptools python-wheel python-numpy python-scipy cython ``` --- ### 提供一段简单的测试脚本来验证最终成果是否正常工作 一旦上述所有潜在障碍都被排除之后,就可以再次尝试重新执行 pip 安装流程看能否顺利完成整个操作链条直至结束为止。下面给出了一段用于初步检验功能的小程序代码片段作为参考依据之用: ```python from mmdet.apis import inference_detector, init_detector config_file = 'path/to/config/file.py' checkpoint_file = 'path/to/checkpoint/file.pth' model = init_detector(config_file, checkpoint_file, device='cuda:0') result = inference_detector(model, img_path) if isinstance(result, tuple): bbox_result, segm_result = result else: bbox_result, segm_result = result, None ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值