zoukankan      html  css  js  c++  java
  • hdu 4607 Park Visit

    求出树的直径d。当k<=d的时候,显然直接在直径上走就行了,当k>d的时候,便是直径d的长度 加上 多出来的点数*2.

    #include<iostream>
    #include<algorithm>
    #include<vector>
    #include<cstdio>
    #include<cstring>
    #define FF(i, a ,b) for(int i=a; i<b; i++)
    #define FD(i, a ,b) for(int i=a; i>b; i--)
    #define REP(i, n) for(int i=0; i<n; i++)
    #define LL long long
    #define CLR(a, b) memset(a, b, sizeof(a))
    #define PB push_back
    using namespace std;
    
    const int maxn = 111111;
    int n, m, dist, k, end;
    vector<int> G[maxn];
    
    void dfs(int x, int fa, int d)
    {
        int nc = G[x].size();
        if(nc == 1)
        {
            if(d > dist)
            {
                dist = d;
                end = x;
            }
        }
        REP(i, nc)
        {
            int v = G[x][i];
            if(v != fa)
            {
                dfs(v, x, d+1);
            }
        }
    }
    
    int main()
    {
        int T, a, b;
        scanf("%d", &T);
        while(T--)
        {
            scanf("%d%d", &n, &m);
            REP(i, n+1) G[i].clear();
            FF(i, 1, n)
            {
                scanf("%d%d", &a, &b);
                G[a].PB(b);
                G[b].PB(a);
            }
            dist = 0;
            dfs(1, -1, 0);
            dfs(end, -1, 0);
            dist++;
            while(m--)
            {
                scanf("%d", &k);
                if(k <= dist) printf("%d
    ", k-1);
                else printf("%d
    ", dist - 1 + (k-dist)*2);
            }
        }
        return 0;
    }
    


  • 相关阅读:
    Redis主从复制
    POI导出给指定单元格添加背景色
    Mybatis的resultMap使用
    前后端分离
    日常总结
    java环境变量配置
    Java线程池七个参数详解
    java中常见的锁
    Linux定时任务
    SQL语句的整理
  • 原文地址:https://www.cnblogs.com/jiangu66/p/3214857.html
Copyright © 2011-2022 走看看