1 条题解

  • 0
    @ 2025-11-11 16:54:19

    E87 换根DP CF1187E Tree Painting

    // 换根DP O(n)
    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <vector>
    using namespace std;
    
    const int N=200010;
    vector<int> e[N];
    int n;
    long long sz[N],f[N],ans;
    
    void dfs(int u,int fa){
      sz[u]=1;
      for(int v:e[u]){
        if(v==fa)continue;
        dfs(v,u);
        sz[u]+=sz[v];
      }
      f[1]+=sz[u];
    }
    void dfs2(int u,int fa){
      for(int v:e[u]){
        if(v==fa)continue;
        f[v]=f[u]-sz[v]+n-sz[v];
        ans=max(ans,f[v]);
        dfs2(v,u);
      }
    }
    int main(){
      scanf("%d",&n);
      for(int i=1,u,v;i<n;i++){
        scanf("%d%d",&u,&v);
        e[u].push_back(v);
        e[v].push_back(u);
      }
      dfs(1,0);
      dfs2(1,0);
      printf("%lld",ans);
    }```
    • 1

    信息

    ID
    1416
    时间
    2000ms
    内存
    256MiB
    难度
    6
    标签
    递交数
    45
    已通过
    16
    上传者