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

    本题的意思是说走k个顶点需要的最短路径,本题给你一颗树,我们只需DFS这颗树的最大深度R。如果k小于这个深度就是k-1,如果大于k,就是R-1+(k-r)*2;因为其他的边要走两次。

    #include <iostream>
    #include <cstdio>
    #include <string>
    #include <algorithm>
    #include <vector>
    #include <string.h>
    using namespace std;
    
    typedef __int64 ll;
    
    const int N = 111111;
    vector<int> e[N];
    int d[N];
    int n,m,k,ret;
    
    void dfs(int k,int fa,int dp){
        d[k]=dp;
        for (int i=0;i<e[k].size();++i)
            if (e[k][i]!=fa) dfs(e[k][i],k,dp+1);
    }
    
    int main(){
        int _;
        scanf("%d",&_);
        while (_--){
            scanf("%d%d",&n,&m);
            for (int i=1;i<=n;++i) e[i].clear();
            for (int i=1,p1,p2;i<n;++i){
                scanf("%d%d",&p1,&p2);
                e[p1].push_back(p2);
                e[p2].push_back(p1);
            }
            ret = 1;
            dfs(ret,0,0);
            for (int i=2;i<=n;++i) if (d[i]>d[ret]) ret=i;
            dfs(ret,0,0);
            for (int i=2;i<=n;++i) if (d[i]>d[ret]) ret=i;
            ret = d[ret];
            while (m--){
                scanf("%d",&k);
                if (k<=ret+1) printf("%d
    ",k-1);
                else printf("%d
    ",ret+(k-ret-1)*2);
            }
        }
        return 0;
    }
  • 相关阅读:
    溢出省略号
    自定义字体
    jquery实现上一页下一页
    集成学习理解
    常用命令-python篇
    python 多进程和多线程
    10预处理命令上
    9函数
    8指针2
    7指针1
  • 原文地址:https://www.cnblogs.com/BruceNoOne/p/3209454.html
Copyright © 2011-2022 走看看