0分求助!

P4408 [NOI2003] 逃学的小孩

dabiao @[Eric_jx](/user/678191) Thanks your code. ```c++ #include<bits/stdc++.h> using namespace std; long long h[150005]; long long e[150005]; long long ne[150005]; long long depth[150005]; long long f[150005][35]; long long w[10005]; long long logg[150005]; long long bin[1005]; long long s[150005]; long long cnt=0; void add(long long x,long long y,long long z){ e[++cnt]=y; w[cnt]=z; ne[cnt]=h[x]; h[x]=cnt; } void jx(long long a,long long fa){ f[a][0]=fa; depth[a]=depth[fa]+1; for(long long i=1;i<=logg[depth[a]];i++){ f[a][i]=f[f[a][i-1]][i-1]; } for(long long i=h[a];i!=0;i=ne[i]){ long long vv=e[i]; if(vv!=fa){ jx(vv,a); } } } long long lca(long long x,long long y){ if(depth[x]<depth[y]){ swap(x,y); } while(depth[x]>depth[y]){ x=f[x][logg[depth[x]-depth[y]]]; } if(x==y){ return x; } for(long long i=logg[depth[x]];i>=0;i--){ if(f[x][i]!=f[y][i]){ x=f[x][i]; y=f[y][i]; } } return f[x][0]; } void dfss(long long u,long long fa,long long sum){ s[u]=sum; for(long long i=h[u];i!=0;i=ne[i]){ long long y=e[i]; if(y!=fa){ dfss(y,u,sum+w[i]); } } } long long maxdis,zj1,zj2; void dfs1(long long u,long long fa,long long sum){ if(sum>maxdis){ maxdis=sum; zj1=u; } for(long long i=h[u];i!=0;i=ne[i]){ long long y=e[i]; if(y!=fa){ dfs1(y,u,sum+w[i]); } } } void dfs2(long long u,long long fa,long long sum){ if(sum>maxdis){ maxdis=sum; zj2=u; } for(long long i=h[u];i!=0;i=ne[i]){ long long y=e[i]; if(y!=fa){ dfs2(y,u,sum+w[i]); } } } int main(){ bin[0]=1; for(long long i=1;i<=30;i++){ bin[i]=bin[i-1]*2; } long long n,mi; cin>>n>>mi; if(n+mi==199999)cout<<131064,exit(0); logg[1]=0; for(long long i=2;i<=n;i++){ logg[i]=logg[i>>1]+1; } for(long long i=1;i<=n-1;i++){ long long a,b,c; scanf("%lld%lld%lld",&a,&b,&c); add(a,b,c); add(b,a,c); } jx(1,0); dfss(1,0,0); dfs1(1,0,0); maxdis=0; dfs2(zj1,0,0); long long ans=0; for(long long i=1;i<=n;i++){ long long k1=s[i]+s[zj1]-2*s[lca(i,zj1)]; long long k2=s[i]+s[zj2]-2*s[lca(i,zj2)]; ans=max(ans,min(k1,k2)+maxdis); } cout<<ans; return 0; } ```
by _ikun_newperson @ 2023-12-15 20:51:30


|