hdu 4607 Park Visit
来源:互联网 发布:ssh extjs项目源码 编辑:程序博客网 时间:2024/05/17 00:17
两边bfs求解。
第一遍bfs求出直径的某一个顶点。
第二次bfs求出直径的另一个顶点。
第一遍bfs求出直径的某一个顶点。
第二次bfs求出直径的另一个顶点。
然后直径的长度出来了。直接求解就可以了。
#include<string.h>#include<iostream>#include<algorithm>#include<stdio.h>#include<queue>using namespace std;#define maxn 200005struct list{ int next; int v;}node[maxn];int head[maxn];int num;int len,ns;int n,m;void add(int l,int r){ node[num].v=r; node[num].next=head[l]; head[l]=num++;}void bfs(int p){ int dist[maxn]; for(int i=1;i<=n;i++)dist[i]=9999999; queue<int>q; q.push(p); dist[p]=0; while(!q.empty()) { int x=q.front(); q.pop(); for(int i=head[x];i!=-1;i=node[i].next) { int e=node[i].v; if(dist[e]>dist[x]+1) { dist[e]=dist[x]+1; q.push(e); } } } len=0; for(int i=1;i<=n;i++) { if(len<dist[i]&&dist[i]!=9999999) { len=dist[i]; ns=i; } }}int main(){ int T,i,a,b,k; scanf("%d",&T); while(T--) { num=0; memset(head,-1,sizeof(head)); scanf("%d%d",&n,&m); for(i=0;i<n-1;i++) { scanf("%d%d",&a,&b); add(a,b); add(b,a); } bfs(1); bfs(ns); while(m--) { scanf("%d",&k); if(k<=len+1)printf("%d\n",k-1); else printf("%d\n",len+(k-len-1)*2); } } return 0;}
- 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
- hdu 4607 Park Visit dfs
- hdu 4607 Park Visit (DFS)
- hdu 4607 Park Visit 贪心
- HDU 4607 Park Visit 解题报告
- 修改虚拟机SID号!
- Android学习错误处理
- c#缓存-SqlCacheDependency类
- springMVC入门
- 解决svn的working copy locked并且cleanup恢复不能的情况
- hdu 4607 Park Visit
- intel dpdk api 添加自己的库和创建自己的实例程序
- java.lang.Exception: Socket bind failed: [730048]
- Win7下搭建WEB服务器,局域网内其它机器访问不到
- springMVC学习配置(一)
- C#项目中的bin目录和obj目录的区别,以及Debug版本和Release版本的区别
- POJ 1200 Hash
- Spring MVC3.0.5搭建全程
- jsp servlet Session管理(ThreadLocal)