首页 > 其他 > 详细

树上最远距离

时间:2020-08-27 23:47:00      阅读:93      评论:0      收藏:0      [点我收藏+]

给定一颗N个节点的树,结点从1到N编号。

现在要计算对于每个结点i,到它最远的结点是多少距离,这个值记为S_iSi?

输入

第一行输入两个整数N(2 \le N \le 10^4)N(2N104)。

接下来N-1行,每行两个整数x_i, y_i (1 \le x_i, y_i \le n, x_i \ne y_i)xi?,yi?(1xi?,yi?n,xi??=yi?), 表示x_i, y_ixi?,yi?之间有一条边。

输入保证是一棵树。

输出

第i行输出S_iSi?

样例

输入

 1 /*************************************************************************
 2     > Author: Henry Chen
 3     > Mail: 390989083@qq.com 
 4     > Created Time: 鍥? 8/27 18:58:00 2020
 5  ************************************************************************/
 6 
 7 #include<bits/stdc++.h>
 8 using namespace std;
 9 vector<pair<int,int> >vec[10001];
10 int deep[5][10001];
11 void dfs(int u,int fa,int dep,int p)
12 {
13     // << u << endl;
14     deep[p][u] = dep;
15     for(int i = 0;i < vec[u].size();i++)
16     {
17         int v = vec[u][i].first;
18         if(v != fa)
19         {
20             dfs(v,u,dep+vec[u][i].second,p);
21         }
22     }
23 }
24 int main()
25 {
26     int n;
27     cin >> n;
28     for(int i = 2;i <= n;i++)
29     {
30         int u,v;
31         scanf("%d%d",&u,&v);
32         vec[i].push_back(make_pair(u,v));
33         vec[u].push_back(make_pair(i,v));
34     }
35     dfs(1,1,0,1);
36     int mx = 0;
37     int num;
38     for(int i = 1;i <= n;i++)
39     {
40         if(mx < deep[1][i])
41         {
42             num = i;
43             mx = deep[1][i];
44         }
45     }
46     dfs(num,num,0,2);
47     mx = 0;
48     for(int i = 1;i <= n;i++)
49     {
50         if(mx < deep[2][i])
51         {
52             num = i;
53             mx = deep[2][i];
54         }
55     }
56     dfs(num,num,0,3);
57     for(int i = 1;i <= n;i++)
58     {
59         printf("%d\n",max(deep[2][i],deep[3][i]));
60     }
61     return 0;
62 }

 

5
1 1
2 1
3 1
1 1

输出

3
2
3
4
4

提示

技术分享图片

结点4到结点1最远, S_1 = 3  S1?=3 。

结点4和结点5到结点2都是最远的, S_2 = 2  S2?=2 。

结点5到结点3距离最远, S_3 = 3  S3?=3 。

结点5到结点4距离最远, S_4 = 4  S4?=4 。

结点4到结点5距离最远, S_5 = 4  S5?=4 。

树上最远距离

原文:https://www.cnblogs.com/mzyy1001/p/13574463.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!