HDOJ 4607 - Park Visit
来源:互联网 发布:js锚点定位 滚动 导航 编辑:程序博客网 时间:2024/04/28 13:26
用树形DP找到这颗树距离最远的两个点....对于一个询问K..若小于最远距离..显然只要走最远的这条边走K-1个边就行了..
当K大于了最远距离..就要去走其他的点...而去其他点必须再回到这个主线..所以要加上(最远距离上点总数-K)*2...
Program:
#include<iostream>#include<stack>#include<queue>#include<stdio.h>#include<algorithm>#include<string.h>#include<cmath>#define ll long long#define oo 1000000007#define MAXN 100010using namespace std;vector<int> Tree[MAXN];int dis[MAXN],M;void dfs(int x,int f){ int i,m=Tree[x].size(); dis[x]=1; for (i=0;i<m;i++) if (Tree[x][i]!=f) { dfs(Tree[x][i],x); M=max(M,dis[x]+dis[Tree[x][i]]); dis[x]=max(dis[x],dis[Tree[x][i]]+1); } return;}int main(){ int T,i,n,k; scanf("%d",&T); while (~scanf("%d%d",&n,&k)) { for (i=1;i<=n;i++) Tree[i].clear(); for (i=1;i<n;i++) { int x,y; scanf("%d%d",&x,&y); Tree[x].push_back(y); Tree[y].push_back(x); } memset(dis,0,sizeof(dis)); M=0; dfs(1,0); while (k--) { int x; scanf("%d",&x); if (x<=M) printf("%d\n",x-1); else printf("%d\n",M-1+(x-M)*2); } } return 0;}
- HDOJ 4607 - Park Visit
- HDOJ 4607 Park Visit
- HDOJ 4607 Park Visit
- HDOJ 题目4607 Park Visit(树的直径)
- hdu 4607 Park Visit
- hdu 4607 Park Visit
- hdu - 4607 - Park Visit
- hdu 4607 Park Visit
- hdu-4607-Park Visit
- HDU 4607 Park Visit
- HDU 4607 Park Visit
- HDU 4607 Park Visit
- hdu 4607 Park Visit
- hdu 4607 Park Visit
- hdu 4607 Park Visit
- HDU - 4607 Park Visit
- HDU 4607 Park Visit
- HDU 4607 Park Visit
- 日期问题
- drawable与bitmap转换
- 将纵表转化成横表
- poj 1118 Lining Up (暴力)
- SQL Server 解读【已分区索引的特殊指导原则】(3)
- HDOJ 4607 - Park Visit
- 解决ECSHOP在IPAD等平板电脑和智能手机的显示问题
- Windows下的线程绑定技术
- myeclipse的服务启动不了
- 周流水0726+0804
- uva 120 Stacks of Flapjacks(检索)
- iOS 开发库(iOS Developer Library)
- ps 去除图像背景
- wordpress二次开发教程手记:写入cookie记录访客行为