我有一棵树,我想在每个节点找到子树。我尝试了以下代码 阅读
scanf("%d %d", &n,&e);
memset(chk, 0, sizeof sub);
for(int i = 0; i < e; i++){
int u, v;
scanf("%d %d", &u, &v);
adj[u].push_back(v);
//adj[v].push_back(u);
}
并且子树的大小计算为
int * dfs(int current, int parent)
{
sub[current] = 0;
for(int i=0;i<adj[current].size();i++)
{
int next = adj[current][i];
if(next == parent)continue;
dfs(next, current);
sub[current] += sub[next] + 1;
}
return sub;
}
我将adj定义为 形容词[U] .push_back(V); 此算法失败的测试用例 输入文件:
9 7
0 1
1 2
1 3
2 3
3 4
6 7
6 8
我的输出为
*(s + 0) : 6
*(s + 1) : 5
*(s + 2) : 2
*(s + 3) : 1
*(s + 4) : 0
*(s + 5) : 0
*(s + 6) : 0
*(s + 7) : 0
*(s + 8) : 0
工作一:输入
5 4
1 2
1 3
1 4
3 4
output is
*(s + 0) : 0
*(s + 1) : 4
*(s + 2) : 0
*(s + 3) : 1
*(s + 4) : 0