求助!!!

P3478 [POI2008] STA-Station

听不懂您的问题 ```cpp // luogu-judger-enable-o2 #include <cstdio> #include <cstring> #include <cmath> #include <iostream> #include <algorithm> using namespace std; inline long long read(){ long long f=1,x=0; char c=getchar(); while (c<'0'||c>'9'){if(c=='-') f=-1;c=getchar();} while (c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();} return f*x; } const long long maxn=1e6+5; long long n,m,g,h,o,p,cnt,sum; long long dep[maxn],siz[maxn],nxt[maxn*2],s[maxn*2],lnk[maxn],f[maxn]; long long ans[maxn]; inline void add(long long x,long long y){ cnt++; s[cnt]=y; nxt[cnt]=lnk[x]; lnk[x]=cnt; } void dfs(long long x,long long y){ siz[x]=1,f[x]=y;dep[x]=dep[y]+1; sum+=dep[x]; for (long long i=lnk[x];i>-1;i=nxt[i]){ if (s[i]==y) continue; dfs(s[i],x); siz[x]+=siz[s[i]]; } } void search(long long x,long long y){ for (long long i=lnk[x];i>-1;i=nxt[i]){ if (s[i]==y) continue; ans[s[i]]=ans[x]+n-2*siz[s[i]]; search(s[i],x); } } int main(){ memset(lnk,-1,sizeof(lnk)); n=read(); for (long long i=1;i<n;i++){ long long x=read(),y=read(); add(x,y); add(y,x); } dfs(1,0); ans[1]=sum-n; // printf("%lld\n",ans[1]); search(1,0); long long mx=-1e16; for (long long i=1;i<=n;i++) if (ans[i]>mx) mx=ans[i],p=i; printf("%lld",p); return 0; } ```
by wizard(偷开O2 @ 2020-11-02 20:55:23


就是好奇为什么题解里面说树的直径是可以AC的 以及如果真的可行那我的错误在哪里 谢谢
by Ricardo_21 @ 2020-11-02 21:05:29


|