题目描述
时间限制:1s 空间限制:500M
题目描述:
读入一棵以 1 为根的树,输出以每个节点为根的子树的大小。
输入格式:
第一行一个整数 n 表示节点数。(1≤n≤100000)
之后 n-1 行每行两个整数 x, y,表示一条连接 x 和 y 的边,保证输入的图形成一棵树。
输出格式:
n 行,每行 1 个整数,第 i 行为以节点 i 为根的子树的大小。
样例输入:
6
2 1
2 3
2 4
2 5
6 5
样例输出:
6
5
1
1
2
1
我的代码 可能没用
#include<bits/stdc++.h>
using namespace std;
vector<int> a[100005];
int n,x,y,vis[100005],x1[100005],y2[100005];
int ans[100005];
int dfs(int x,int fa)
{
vis[x]=fa;
for(int i=0;i<a[x].size();i++)
{
if(a[x][i]!=fa)
{
ans[x]+=ans[a[x][i]];
}
}
return ans[x];
}
int main()
{
cin>>n;
for(int i=1;i<n;i++)
{
scanf("%d%d",&x1[i],&y2[i]);
}
for(int i=1;i<n;i++)
{
printf("%d \n",dfs(x1[i],y2[i]));
}
return 0;
}
求各位大佬看看有什么问题