zoukankan      html  css  js  c++  java
  • hdu4607Park Visit 树的直径

    //给一棵双向树,数中边的权值为1,问对于这颗树中走k个节点的最短路径
    //假设k小于这颗数的直径加1,那么走k个节点就没有反复的路,假设大于
    //那么大于的节点都须要走两遍
    #include<cstdio>
    #include<cstring>
    #include<iostream>
    #include<queue>
    using namespace std ;
    const int maxn = 100010 ;
    int head[maxn] ;
    int vis[maxn] ;
    struct Edge
    {
        int v ;
        int next ;
    }edge[maxn*2] ;
    int nedge ;
    void addedge(int u , int v)
    {
        edge[nedge].v = v ;
        edge[nedge].next = head[u] ;
        head[u] = nedge++ ;
        edge[nedge].v = u ;
        edge[nedge].next = head[v] ;
        head[v] = nedge++ ;
    }
    queue<int>que ;
    int ma = 0 ;
    int bfs(int st)
    {
        while(que.size())que.pop() ;
        que.push(st) ;que.push(0) ;que.push(0) ;
        int pos ;
        while(que.size())
        {
            int u = que.front() ; que.pop() ;
            int step = que.front() ;que.pop() ;
            int pre = que.front() ; que.pop() ;
            if(step > ma)
            {
                ma = step ;
                pos = u ;
            }
            for(int i = head[u] ; i !=  -1 ;i = edge[i].next)
            {
                int v = edge[i].v ;
                if(v == pre)continue ;
                que.push(v);que.push(step+1);que.push(u) ;
            }
        }
        return pos ;
    }
    int main()
    {
        int t ;
        scanf("%d" , &t) ;
        while(t--)
        {
            int n , m ;
            memset(head ,  -1 ,sizeof(head)) ;
            nedge = 0 ;
            scanf("%d%d" , &n , &m) ;
            for(int i = 1;i < n; i++)
            {
                int u  ,v ;
                scanf("%d%d" , &u , &v) ;
                addedge(u , v) ;
            }
            ma = 0 ;
            int pos = bfs(1) ;
            bfs(pos) ;
            while(m--)
            {
                int k ;
                scanf("%d" , &k) ;
                if(k <= ma+1)printf("%d " , k - 1) ;
                else printf("%d " , (k - (ma+1))*2+ma) ;
            }
        }
        return 0 ;
    }















































  • 相关阅读:
    20160205.CCPP体系详解(0015天)
    盘点各专业到古代都能干些啥
    一份简单的在 Linux下编译及调试 C 代码的指南
    WordPress Gravatar国内加载缓慢解决办法
    linux修改mysql字符集编码
    阿里合伙人邵晓锋:什么是创业者应该抵制的诱惑?
    6月27日云栖精选夜读:细数智能家居的痛点
    6月26日云栖精选夜读:成为一名Java高级工程师你需要学什么
    搭建百万级别邮件发送平台
    黑科技实验室:这些高级装备厉害了!
  • 原文地址:https://www.cnblogs.com/blfshiye/p/5422324.html
Copyright © 2011-2022 走看看