1 条题解
-
0
C++ :
#include<cstdio> #include<cstring> using namespace std; const int MAXN=1000010; typedef long long LL; int n,tot,ans; int h[MAXN]; int fa[MAXN]; LL size[MAXN],f[MAXN]; struct Edge{ int u,v,next; }e[MAXN<<1]; void add(int u,int v) { e[++tot].u=u; e[tot].v=v; e[tot].next=h[u]; h[u]=tot; } void dfs(int x) { size[x]=1; for(int i=h[x];i;i=e[i].next) { int v=e[i].v; if(v==fa[x]) continue; fa[v]=x; dfs(v); size[x]+=size[v]; f[x]+=f[v]+size[v]; } } void dp(int x) { if(x!=1) f[x]=f[fa[x]]+n-2*size[x]; for(int i=h[x];i;i=e[i].next) { if(e[i].v==fa[x]) continue; dp(e[i].v); } } int main(){ int i,u,v; scanf("%d",&n); for(i=1;i<n;++i) { scanf("%d%d",&u,&v); add(u,v);add(v,u); } dfs(1);dp(1); for(i=1;i<=n;i++) if(f[i]>f[ans]) ans=i; printf("%d",ans); }
- 1
信息
- ID
- 3349
- 时间
- 2000ms
- 内存
- 128MiB
- 难度
- (无)
- 标签
- 递交数
- 0
- 已通过
- 0
- 上传者