码迷,mamicode.com
首页 > 其他好文 > 详细

树的重心

时间:2018-01-02 19:59:46      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:logs   sdi   read   node   ios   pac   code   system   getch   

寻找树的重心

#include<cstdio>
#include<cstdlib>
#include<iostream>
#define N 1000004
#define inf 0x3f3f3f3f
using namespace std;

void read(int &s){
    char ch=getchar();int f=1;
    for(;!isdigit(ch);ch=getchar())if(ch='-')f=-1;
    for(s=0;isdigit(ch);s=s*10+ch-'0',ch=getchar());
    s*=f;
}

void print(int s){
    printf("%d\n",s);
    return ;
}

int n;
int siz[N];
int son[N];
int root,minl;

struct Edge{
    int v,nxt;
}e[N];
int head[N],tot;

void AddEdge(int u,int v){
    e[++tot].v=v;
    e[++tot].nxt=head[u];
    head[u]=tot;
    e[++tot].v=u;
    e[++tot].nxt=head[v];
    head[v]=tot;
}

void dfs(int node,int fa){
    for(int i=head[node];i;i=e[i].nxt){
        int to=e[i].v;
        if(to==fa)continue;
        dfs(to,node);
        siz[node]+=siz[to];
        son[node]=max(son[node],siz[to]);
    }
    son[node]=max(son[node],n-son[node]-1);
    if(son[node]<minl)minl=son[node],root=node;
    return ;
}

int main(){
    int a,b;
    minl=inf;
    read(n);
    for(int i=1;i<n;++i){
        read(a),read(b);AddEdge(a,b);
    }
    dfs(1,0);
    print(root);
    system("pause");
    return 0;
}

树的重心

标签:logs   sdi   read   node   ios   pac   code   system   getch   

原文地址:https://www.cnblogs.com/qdscwyy/p/8178428.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!