| ||||||||||
| Online Judge | Problem Set | Authors | Online Contests | User | ||||||
|---|---|---|---|---|---|---|---|---|---|---|
| Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest | |||||||||
Re:maxn开20010RE,200010就能过了,简直逗我In Reply To:maxn开20010RE,200010就能过了,简直逗我 Posted by:helica at 2015-11-20 11:37:23 > /*--------------------------------------------------------------------------------------*/
> // Helica's header
> // Second Editions
> // 2015.11.7
> //
> #include <algorithm>
> #include <iostream>
> #include <cstring>
> #include <ctype.h>
> #include <cstdlib>
> #include <cstdio>
> #include <vector>
> #include <string>
> #include <queue>
> #include <stack>
> #include <cmath>
> #include <set>
> #include <map>
>
> //debug function for a N*M array
> #define debug_map(N,M,G) printf("\n");for(int i=0;i<(N);i++)\
> {for(int j=0;j<(M);j++){\
> printf("%d",G[i][j]);}printf("\n");}
> //debug function for int,float,double,etc.
> #define debug_var(X) cout<<#X"="<<X<<endl;
> /*--------------------------------------------------------------------------------------*/
> using namespace std;
>
> const int maxn = 200010;
> int N,M,T,kase;
> int maxsubtree[maxn],sons[maxn];
> bool vis[maxn];
>
> struct Edge{
> int to,next;
> }edge[2*maxn];
>
> int head[maxn],tot;
>
> void dfs(int u)
> {
> vis[u] = 1;
> sons[u] = 1;
> for(int i=head[u];i != -1;i = edge[i].next)
> {
> int v = edge[i].to;
> if(vis[v]) continue;
> dfs(v);
> sons[u] += sons[v];
> maxsubtree[u] = max(sons[v],maxsubtree[u]);
> }
> maxsubtree[u] = max(maxsubtree[u],N-sons[u]);
> }
>
> void addedge(int u,int v)
> {
> edge[tot].to = v;
> edge[tot].next = head[u];
> head[u] = tot++;
> }
>
> int main()
> {
> scanf("%d",&T);
> while(T--)
> {
> memset(vis,0,sizeof vis);
> memset(head,-1,sizeof head);
> memset(maxsubtree,0,sizeof maxsubtree);
> scanf("%d",&N);
> for(int i=1;i<N;i++)
> {
> int u,v;
> scanf("%d%d",&u,&v);
> addedge(u,v);
> addedge(v,u);
> }
> dfs(1);
> int id,size=maxn;
> for(int i=1;i<=N;i++)
> {
> if(size > maxsubtree[i])
> {
> id = i;
> size = maxsubtree[i];
> }
> }
> printf("%d %d\n",id,size);
> }
> }
Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator