2627 树的深度及子树大小(并查集)

  • Post author:
  • Post category:其他


现在有一棵n个节点的树,节点1为这棵树的根,求出每个节点的深度以及每个节点的子树中的节点个数。

输入

第1行:一个数字n,表示树中节点的个数。(1<=n<=100000)

第2-n行:每行两个数字u,v,表示u与v之间有一条边。(1<=u,v<=n)

输出

输出n行,每行两个正整数,第i行的第一个正整数表示节点i的深度,第二个正整数表示以节点i为根的子树大小。

输入样例

10

1 2

1 3

1 4

2 5

2 8

4 6

4 7

6 9

6 10

输出样例

1 2 2 2 3 3 3 3 4 4

10 3 1 5 1 3 1 1 1 1



2281 树的Size之和(并查集)

差不多,修改一下就行

#include<bits/stdc++.h>
using namespace std;
int fa[1010],num[1010],layer[1010];
int x,y;
void find(int x)
{
 num[x]++;
 layer[y]++;
 if(fa[x]!=x)
  find(fa[x]);	
}
int main()
{
 ios::sync_with_stdio(false);
 int n,sum=0;
 cin>>n;
 for(int i=1;i<=n;i++)
  fa[i]=i;
 for(int i=1;i<n;i++)
 {
 	cin>>x>>y;
 	find(x);
 	fa[y]=x;
 }
 for(int i=1;i<=n;i++)
  cout<<layer[i]+1<<" ";
 cout<<endl;
 for(int i=1;i<=n;i++)
  cout<<num[i]+1<<" ";
 return 0;
} 



版权声明:本文为weixin_43540515原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。