Input
第一行是一个整数N(1≤N ≤50000),表示计算机的台数,计算机被编号为1…N。
下面N-1行,每行包括两个整数X, Y,表示X和Y这两台计算机之间由一条网线连接。
1号点为根
Output
给出N行,分别表示从1号到N号点,每个点的深度为多少
1号点的深度为0
Sample Input
3
1 2
1 3
Sample Output
0
1
1
本题大意:
给你一个有n个节点的数,现求每个节点的深度。
题解:
1、还原这一棵数,把每条边的子节点记下。
2、用dfs搜索,从根节点的深度推出子节点的深度即可。
3、最后,打印出每个节点的深度。
代码实现
#include <bits/stdc++.h>
using namespace std;
int sum,n,s;
int pre[100001],now[100001],son[100001],dist[100001];
bool pp[50001];
void tot(int a,int b) {
pre[++sum]=now[a];
now[a]=sum;
son[sum]=b;
}
void dfs(int u,int r) {
pp[u]=1;
dist[u]=r+1;
int ans=0,m=0;
for(int i=now[u]; i; i=pre[i]) {
int k=son[i];
if(!pp[k])
dfs(k,r+1);
}
}
int main() {
int a,b;
scanf("%d",&n);
for(int i=1; i<=n-1; i++) {
scanf("%d%d",&a,&b);
tot(a,b);
tot(b,a);
}
dfs(1,-1);
for(int i=1; i<=n; i++)
printf("%d\n",dist[i]);
return 0;
}
第五篇优快云,不好请见谅,谢谢!