1 solutions
-
-1
#include<bits/stdc++.h> using namespace std; const int N=1e5+10,M=2e5+10,INF=0x3f3f3f3f; int h[N],e[M],ne[M],w[M],idx; int d1[N],d2[N],p[N],leaf[N],up[N]; void add(int a,int b,int c) { e[idx]=b,ne[idx]=h[a],w[idx]=c,h[a]=idx++; } int dfs(int u,int father) { d1[u]=d2[u]=-INF; for(int i=h[u];i!=-1;i=ne[i]) { int j=e[i]; if(j==father) continue; int d=dfs(j,u)+w[i]; if(d>d1[u]) { d2[u]=d1[u],d1[u]=d; p[u]=j; } else { d2[u]=d; } } if(d1[u]==-INF) { leaf[u]=1; d1[u]=d2[u]=0; } else if(d2[u]==-INF) { d2[u]=0; } return d1[u]; } void dfs2(int u,int father) { for(int i=h[u];i!=-1;i=ne[i]) { int j=e[i]; if(j==father) continue; if(p[u]==j) { up[j]=max(d2[u],up[u])+w[i]; } else up[j]=max(d1[u],up[u])+w[i]; dfs2(j,u); } } int main() { int n; cin>>n; memset(h,-1,sizeof h); for(int i=1;i<n;i++) { int a,b,c; cin>>a>>b>>c; add(a,b,c); add(b,a,c); } dfs(1,-1); dfs2(1,-1); int ans=INF; for(int i=1;i<=n;i++) { if(leaf[i]) ans=min(ans,up[i]); else ans=min(ans,max(d1[i],up[i])); } cout<<ans; return 0; }
Information
- ID
- 374
- Time
- 1000ms
- Memory
- 128MiB
- Difficulty
- 10
- Tags
- # Submissions
- 7
- Accepted
- 4
- Uploaded By