zoukankan      html  css  js  c++  java
  • 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 }
  • 相关阅读:
    六、使用media实现响应式布局
    五、块全屏居中
    四、圆角长方形的设计
    三、常用行内元素与块元素
    二、“…”显示超出文本
    一、CSS实现横列布局的方法总结
    window如何一键关闭所有进程程序
    纯css竟可以做出边框这样长宽度的过渡效果
    改变网页的兼容性模式
    bootstrap知识笔记
  • 原文地址:https://www.cnblogs.com/scaulok/p/9715746.html
Copyright © 2011-2022 走看看