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

[POI2008] STA-Station - 树形dp

时间:2020-02-03 19:22:44      阅读:91      评论:0      收藏:0      [点我收藏+]

标签:memset   etc   cout   station   +=   turn   amp   void   char   

很显然的递推式ans[q] = ans[p] + n - 2*siz[q];

这么个题你卡我常干嘛,害得我加快读

(谁叫我是vector党呢

#include <bits/stdc++.h>
using namespace std;

#define int long long
const int N = 1000006;

inline int read(){
    int s=0,w=1;
    char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')w=-1;ch=getchar();}
    while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
    return s*w;
}

int n,siz[N],vis[N],sum[N],ans[N],t1,t2;
vector <int> g[N];

void dfs1(int p) {
    vis[p]=1;
    siz[p]=1;
    for(int i=0;i<g[p].size();i++) {
        int q=g[p][i];
        if(vis[q]==0) {
            dfs1(q);
            siz[p]+=siz[q];
            sum[p]+=sum[q]+siz[q];
        }
    }
}

void dfs2(int p) {
    vis[p]=1;
    for(int i=0;i<g[p].size();i++) {
        int q=g[p][i];
        if(vis[q]==0) {
            ans[q] = ans[p] + n - 2*siz[q];
            dfs2(q);
        }
    }
}

signed main() {
    n=read();
    for(int i=1;i<n;i++) {
        t1=read();
        t2=read();
        g[t1].push_back(t2);
        g[t2].push_back(t1);
    }
    dfs1(1);
    ans[1]=sum[1];
    memset(vis,0,sizeof vis);
    dfs2(1);
    cout<<max_element(ans+1,ans+n+1)-ans;
}

[POI2008] STA-Station - 树形dp

标签:memset   etc   cout   station   +=   turn   amp   void   char   

原文地址:https://www.cnblogs.com/mollnn/p/12256510.html

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