Balancing Act http://poj.org/problem?id=1655

 1 #include<cstdio>
 2 #include<cstring>
 3 #include<algorithm>
 4 #include<vector>
 5 #define mt(a,b) memset(a,b,sizeof(a))
 6 using namespace std;
 7 const int M=50010;
 8 vector<int> g[M];
 9 int dp[M],num[M],n;
10 void dfs(int u,int fa){
11     dp[u]=0;
12     num[u]=1;
13     int len=g[u].size();
14     for(int i=0;i<len;i++){
15         int v=g[u][i];
16         if(v!=fa){
17             dfs(v,u);
18             num[u]+=num[v];
19             dp[u]=max(dp[u],num[v]);
20         }
21     }
22     dp[u]=max(dp[u],n-num[u]);
23 }
24 int main(){
25     int t;
26     while(~scanf("%d",&t)){
27         while(t--){
28             scanf("%d",&n);
29             for(int i=1;i<=n;i++) g[i].clear();
30             for(int i=0,u,v;i<n-1;i++){
31                 scanf("%d%d",&u,&v);
32                 g[u].push_back(v);
33                 g[v].push_back(u);
34             }
35             dfs(1,-1);
36             int sma=n;
37             for(int i=1;i<=n;i++){
38                 sma=min(sma,dp[i]);
39             }
40             for(int i=1;i<=n;i++){
41                 if(dp[i]==sma){
42                     printf("%d %d\n",i,dp[i]);
43                     break;
44                 }
45             }
46         }
47     }
48     return 0;
49 }
View Code

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-05-17
  • 2021-08-22
  • 2022-12-23
  • 2022-12-23
  • 2021-12-12
猜你喜欢
  • 2021-09-16
  • 2021-05-09
  • 2022-12-23
  • 2021-08-31
  • 2021-09-11
  • 2021-05-31
相关资源
相似解决方案