CCPC 2017 哈尔滨 D. X-Men && HDU 6233

Posted scaulok

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CCPC 2017 哈尔滨 D. X-Men && HDU 6233相关的知识,希望对你有一定的参考价值。

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6233

题意:一个树上有m个人,每个人在某个节点上,每个时刻每个人可以和一个与他距离大于 1 的点进行交流,然后往交流的人的方向走一步,当他一个人没有可以交流的人时就不可以走了,问所有人都不走的期望时间是多少。

题解:假设 t 时刻两个距离最远的人的距离为 x,则在 t + 1 时刻这两个人距离为 x - 2,因为这两个人在这一时刻走的方向是一定的,而在 t 时刻距离为 x - 1 的两个人,因为题目限制的不能和距离小于等于 1 的人交流,故他们的距离一定也会缩小,其他距离同理,可以得出在 t + 1 时刻两个人的最长距离变为 x - 2,故答案则为两个人最长距离的一半。

 

 1 #include <iostream>
 2 #include <algorithm>
 3 #include <cstdio>
 4 #include <cstdlib>
 5 #include <cstring>
 6 #include <string>
 7 #include <cmath>
 8 #include <stack>
 9 #include <queue>
10 #include <vector>
11 #include <map>
12 #include <set>
13 #include <bitset>
14 using namespace std;
15 #define ll long long
16 #define ull unsigned long long
17 #define mst(a,b) memset((a),(b),sizeof(a))
18 #define pii pair<int,int>
19 #define pII pair<ll,ll>
20 #define pi acos(-1)
21 #define pb push_back
22 const double eps = 1e-6;
23 const int inf = 0x3f3f3f3f;
24 const ll INF = 0x3f3f3f3f3f3f3f3f;
25 const int MAXN = 1e3 + 10;
26 const int MAXM = 1e6 + 10;
27 
28 vector<int>vec[MAXN];
29 int a[MAXN],root,mx;
30 
31 void dfs(int u,int pre,int dist) {
32     if(a[u] && dist > mx) mx = dist, root = u;
33     for(int i = 0; i < vec[u].size(); i++) {
34         int v = vec[u][i];
35         if(v == pre) continue;
36         dfs(v,u,dist+1);
37     }
38 }
39 
40 int main() {
41 #ifdef local
42     freopen("data.txt", "r", stdin);
43 #endif
44     int t;
45     scanf("%d",&t);
46     while(t--) {
47         int n,m;
48         scanf("%d%d",&n,&m);
49         for(int i = 1; i <= n; i++) {
50             vec[i].clear();
51             a[i] = 0;
52         }
53         int now = -1;
54         while(m--) {
55             int x;
56             scanf("%d",&x);
57             a[x]++;
58             now = x;
59         }
60         for(int i = 1; i < n; i++) {
61             int u,v;
62             scanf("%d%d",&u,&v);
63             vec[u].pb(v);
64             vec[v].pb(u);
65         }
66         root = -1, mx = 0;
67         dfs(now,-1,0);
68         if(root == -1) {
69             puts("0.00");
70             continue;
71         }
72         mx = 0;
73         dfs(root,-1,0);
74         mx /= 2;
75         printf("%.2f
",(double)mx);
76     }
77     return 0;
78 }

 

以上是关于CCPC 2017 哈尔滨 D. X-Men && HDU 6233的主要内容,如果未能解决你的问题,请参考以下文章

2017ccpc哈尔滨区域赛H

2017CCPC Final (哈尔滨)

2017CCPC 哈尔滨 B

2017 CCPC 哈尔滨站 HDU 6242

HDU - 6231 K-th Number (2017CCPC哈尔滨站 二分+尺取法)

2017CCPC-哈尔滨站 Hdu-6230 Palindrome Manacher 主席树