E84【模板】换根DP P3478 [POI2008] STA-Station

视频链接:E84【模板】换根DP P3478 [POI2008] STA-Station_哔哩哔哩_bilibili

 

 

P3478 [POI2008] STA-Station - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

复制代码
// 换根DP O(n)
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;

const int N=1000005;
int n,ans;
int head[N],to[N<<1],ne[N<<1],idx;
void add(int x,int y){
  to[++idx]=y,ne[idx]=head[x],head[x]=idx;
}
long long sz[N],dep[N],f[N],s;

void dfs(int u,int fa){ //预处理
  dep[u]=dep[fa]+1;
  f[1]+=dep[u];
  sz[u]=1;
  for(int i=head[u];i;i=ne[i]){
    int v=to[i];
    if(v==fa) continue;
    dfs(v,u);
    sz[u]+=sz[v];
  }
}
void dfs2(int u,int fa){ //换根DP
  for(int i=head[u];i;i=ne[i]){
    int v=to[i];
    if(v==fa) continue;
    f[v]=f[u]-sz[v]+n-sz[v];
    dfs2(v,u);
  }
}
int main(){
  scanf("%d",&n);
  for(int i=1,x,y;i<n;i++){
    scanf("%d%d",&x,&y);
    add(x,y);add(y,x);
  }
  dfs(1,0);
  dfs2(1,0);
  for(int i=1;i<=n;i++)
    if(f[i]>s) s=f[i],ans=i;
  printf("%d\n",ans);
}
复制代码

 

练习:

Choosing Capital for Treeland - 洛谷 | 计算机科学教育新生态

3585 -- Accumulation Degree

 

posted @   董晓  阅读(108)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示