标签:integer div sep space scanf add case ons each
Time Limit: 1000MS | Memory Limit: 65536K | |
Total Submissions: 14070 | Accepted: 5939 |
Description
Input
Output
Sample Input
1 7 2 6 1 2 1 4 4 5 3 7 3 1
Sample Output
1 2
Source
#include<iostream> #include<cstdio> #include<cstring> using namespace std; int n,x,y,G,sumedge,t; int head[20001],size[20001],dad[20001],dp[20001]; struct Edge { int x,y,nxt; Edge(int x=0,int y=0,int nxt=0):x(x),y(y),nxt(nxt){} }edge[40017]; void add(int x,int y) { edge[++sumedge]=Edge(x,y,head[x]); head[x]=sumedge; } void init() { sumedge=0; memset(head,0,sizeof(head)); memset(size,0,sizeof(size)); memset(dad,0,sizeof(dad)); memset(dp,0,sizeof(dp)); scanf("%d",&n); for(int i=1;i<n;i++) { scanf("%d%d",&x,&y); add(x,y); add(y,x); } } void dfs(int x) { size[x]=1; for(int i=head[x];i;i=edge[i].nxt) { int v=edge[i].y; if(dad[x]!=v) { dad[v]=x; dfs(v); size[x]+=size[v]; dp[x]=max(dp[x],size[v]);//最大的孩子 } } dp[x]=max(dp[x],n-size[x]);//不是子树的那一堆 } void print() { int ans=0x7fffff; for(int i=1;i<=n;i++) if(dp[i]<ans)ans=dp[i],G=i; printf("%d %d\n",G,ans); } int main() { scanf("%d",&t); while(t--) { init(); dfs(1); print(); } return 0; }
标签:integer div sep space scanf add case ons each
原文地址:http://www.cnblogs.com/zzyh/p/7197082.html