HDU4607+BFS
来源:互联网 发布:看星空的软件 编辑:程序博客网 时间:2024/06/06 01:28
BFS求树的直径。
/*bfs+求树的直径关键:if k<=maxs+1 直接输出k-1;else: k肯定的是包括最长路。先从最长路的起点出发,再走分支,最后到达最长路的终点。因此是2*(k-(maxs+1))+maxs;*/#include<stdio.h>#include<string.h>#include<stdlib.h>#include<algorithm>#include<iostream>#include<queue>#include<map>#include<math.h>using namespace std;typedef long long ll;//typedef __int64 int64;const int maxn = 100005;const int inf = 0x7fffffff;const double pi=acos(-1.0);const double eps = 1e-8;struct Node{int v,next;}edge[ maxn<<1 ];int cnt,head[ maxn ];int vis[ maxn ],dis[ maxn ];int maxs,maxNode;void init(){cnt = 0;memset( head,-1,sizeof( head ) );}void addedge( int a,int b ){edge[ cnt ].v = b;edge[ cnt ].next = head[ a ];head[ a ] = cnt++;edge[ cnt ].v = a;edge[ cnt ].next = head[ b ];head[ b ] = cnt++;}void bfs( int s,int n ){memset( vis,0,sizeof( vis ) );vis[ s ] = 1;queue<int>q;q.push( s );//for( int i=0;i<=n;i++ )//dis[ i ] = inf;dis[ s ] = 0;maxs = 0;while( !q.empty() ){int cur = q.front();q.pop();if( dis[ cur ]>maxs ){maxs = dis[ cur ];maxNode = cur;}//maxs = max( maxs,dis[ cur ] );for( int i=head[ cur ];i!=-1;i=edge[ i ].next ){int v = edge[ i ].v;if( vis[ v ]==1 ) continue;vis[ v ] = 1;dis[ v ] = dis[ cur ]+1;q.push( v );}}return ;}int main(){int T;scanf("%d",&T);while( T-- ){int n,m;scanf("%d%d",&n,&m);int a,b;init();int N = n-1;while( N-- ){scanf("%d%d",&a,&b);addedge( a,b );}bfs( 1,n );bfs( maxNode,n );//maxs=the R of the treewhile( m-- ){scanf("%d",&b);if( b<=maxs+1 ) printf("%d\n",b-1);else printf("%d\n",2*(b-maxs-1)+maxs);}}return 0;}
- HDU4607+BFS
- hdu4607
- hdu4607
- hdu4607
- hdu4607
- hdu4607(DFS)
- HDU4607 树的直径
- hdu4607:Park Visit
- hdu4607 树的直径
- HDU4607 Park Visit
- HDU4607 Park Visit
- MUTC2013 H-Park Visit-hdu4607
- hdu4607 Park Visit (树直径)
- HDU4607(求树的直径)
- hdu4607——Park Visit
- HDU4607(最大直径 树DP)
- hdu4607(树的直径+公式)
- hdu4607 (求树的直径)
- 深克隆与浅克隆
- eclipse中java项目转换为web项目
- c++学习论坛推荐 强力推荐
- MFC 创建字体对话框
- 序列化
- HDU4607+BFS
- ubuntu 图形界面和字符界面之间的快速切换
- HDU-1106
- java中类似C++的结构体排序
- 一个有着淡淡忧伤的码农
- jquery库与其他库冲突的问题解决
- 大家一起来学 NHibernate+NUnit (VS2012+SQL Server2008)
- 递归:跳台阶问题
- HDU-1108