zoukankan      html  css  js  c++  java
  • POJ1655 Balancing Act(树的重心)

    树的重心即树上某结点,删除该结点后形成的森林中包含结点最多的树的结点数最少。

    一个DFS就OK了。。

     1 #include<cstdio>
     2 #include<cstring>
     3 #include<algorithm>
     4 using namespace std;
     5 #define MAXN 222222
     6 struct Edge{
     7     int u,v,next;
     8 }edge[MAXN<<1];
     9 int NE,head[MAXN];
    10 void addEdge(int u,int v){
    11     edge[NE].u=u; edge[NE].v=v; edge[NE].next=head[u];
    12     head[u]=NE++;
    13 }
    14 int n,size[MAXN],x,y;
    15 void dfs(int u,int fa){
    16     int cnt=1,res=0;
    17     for(int i=head[u]; i!=-1; i=edge[i].next){
    18         int v=edge[i].v;
    19         if(v==fa) continue;
    20         dfs(v,u);
    21         cnt+=size[v];
    22         res=max(res,size[v]);
    23     }
    24     size[u]=cnt;
    25     res=max(res,n-size[u]);
    26     if(y>res) y=res,x=u;
    27     else if(y==res && x>u) x=u;
    28 }
    29 int main(){
    30     int t,a,b;
    31     scanf("%d",&t);
    32     while(t--){
    33         NE=0;
    34         memset(head,-1,sizeof(head)); 
    35         scanf("%d",&n);
    36         for(int i=1; i<n; ++i){
    37             scanf("%d%d",&a,&b);
    38             addEdge(a,b); addEdge(b,a);
    39         }
    40         y=(1<<30);
    41         dfs(1,0);
    42         printf("%d %d
    ",x,y);
    43     }
    44     return 0;
    45 }
  • 相关阅读:
    今日总结
    微任务与宏任务
    20171128微信小程序
    20171128-微信小程序之点餐
    git
    第二次学习Javascript笔记
    base64图片
    网页布局基础-css版
    StuQ技能图谱——前端
    前端开发工具
  • 原文地址:https://www.cnblogs.com/WABoss/p/5211277.html
Copyright © 2011-2022 走看看