标签:ttl 题目 color query scribe code pac span which
Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3721 Accepted Submission(s): 1667
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int n,m,k,x,y,sumedge,maxn,maxx,t; int dad[100009],dis[100009],head[100009]; struct Edge { int x,y,nxt; Edge(int x=0,int y=0,int nxt=0): x(x),y(y),nxt(nxt){} }edge[200009]; void init() { sumedge=0; memset(head,0,sizeof(head)); memset(dad,0,sizeof(dad)); memset(dis,0,sizeof(dis)); } void add(int x,int y) { edge[++sumedge]=Edge(x,y,head[x]); head[x]=sumedge; } void dfs(int x) { for(int i=head[x];i;i=edge[i].nxt) { int v=edge[i].y; if(dad[x]!=v) { dad[v]=x; dis[v]=dis[x]+1; dfs(v); } } } int main() { scanf("%d",&t); while(t--) { init(); scanf("%d%d",&n,&m); for(int i=1;i<n;i++) { scanf("%d%d",&x,&y); add(x,y);add(y,x); } dfs(1); maxx=-0x7ffff; for(int i=1;i<=n;i++) { if(dis[i]>maxx) { maxx=dis[i]; maxn=i; } } memset(dis,0,sizeof(dis)); memset(dad,0,sizeof(dad)); dfs(maxn); maxx=-0x7ffff; for(int i=1;i<=n;i++) { if(dis[i]>maxx) { maxx=dis[i]; } } while(m--) { scanf("%d",&k); if(k<=maxx) printf("%d\n",k-1); else printf("%d\n",maxx+(k-maxx-1)*2); } } return 0; }
标签:ttl 题目 color query scribe code pac span which
原文地址:http://www.cnblogs.com/zzyh/p/7197523.html