本地过编,上交时ce
查看原帖
本地过编,上交时ce
210719
Violet___Evergarden楼主2021/10/8 14:10

https://www.luogu.com.cn/record/59439967

#include <iostream>
using namespace std;
const int kMaxN=1e6+1;
struct EDGE
{
  int to,nt;
}e[kMaxN*2];
int cnt,hd[kMaxN];
int n;
int size[kMaxN],dp[kMaxN],deep[kMaxN];
int maxdp,ans;
void Add(int a,int b)
{
  e[++cnt].to=b;
  e[cnt].nt=hd[a];
  hd[a]=cnt;
}
void dfs(int now,int last)
{
  deep[now]=deep[last]+1;
  dp[1]+=deep[now];
  size[now]=1;
  for(int i=hd[now];i;i=e[i].nt)
  {
    if(e[i].to==last)continue;
    dfs(e[i].to,now);
    size[now]+=size[e[i].to];
  }
}
void Count(int now,int last)
{
  if(now!=1)
  {
    dp[now]=dp[last]-size[now]+n-size[now];
    if(dp[now]>maxdp)
    {
      maxdp=dp[now];
      ans=now;
    }
  }
  for(int i=hd[now];i;i=e[i].nt)
  {
    if(e[i].to==last)continue;
    Count(e[i].to,now);
  }
}
int main()
{
cin>>n;
for(int i=1;i<n;i++)
{
  int a,b;
  cin>>a>>b;
  Add(a,b);
  Add(b,a);
}
dfs(1,0);
maxdp=dp[1],ans=1;
Count(1,0);
cout<<ans;
return 0;
}
2021/10/8 14:10
加载中...