1 条题解
-
0
80分的程序:
#include <bits/stdc++.h> using namespace std; const int N=1e6+10; vector<pair<int,int>> G[N]; int n,d1[N],d2[N]; void dfs(int x,int fa) { for(auto i:G[x]) { int y=i.first,c=i.second;if(y==fa)continue; dfs(y,x); if(d1[y]+c>d1[x]) d2[x]=d1[x],d1[x]=d1[y]+c; else if(d1[y]+c>d2[x] )d2[x]=d1[y]+c; } } int main() { scanf("%d",&n); for(int i=1,x,y,c; i<=n-1; i++) { scanf("%d%d%d",&x,&y,&c); G[x].push_back({y,c}); G[y].push_back({x,c}); } int ans=1e9+10; for(int i=1;i<=n;i++) { memset(d1,0,sizeof(d1));memset(d2,0,sizeof(d2)); dfs(i,0); ans=min(ans,d1[i]); } printf("%d\n",ans); return 0; }100分的程序:
#include <bits/stdc++.h> using namespace std; const int N=1e6+10; vector<pair<int,int>> G[N]; int n,d1[N],d2[N],path[N],up[N]; void dfs(int x,int fa) { for(auto i:G[x]) { int y=i.first,c=i.second;if(y==fa)continue; dfs(y,x); if(d1[y]+c>d1[x]) d2[x]=d1[x],d1[x]=d1[y]+c,path[x]=y; else if(d1[y]+c>d2[x] )d2[x]=d1[y]+c; } } void dfs2(int x,int fa) { for(auto i:G[x]) { int y=i.first,c=i.second;if(y==fa)continue; if(y==path[x])up[y]=max(up[x],d2[x])+c; else up[y]=max(up[x],d1[x])+c; dfs2(y, x); } } int main() { scanf("%d",&n); for(int i=1,x,y,c; i<=n-1; i++) { scanf("%d%d%d",&x,&y,&c); G[x].push_back({y,c}); G[y].push_back({x,c}); } memset(d1,0,sizeof(d1));memset(d2,0,sizeof(d2)); memset(up,0,sizeof(up)); dfs(1,0); dfs2(1,0); int ans=1e9+10; for(int i=1; i<=n; i++)ans=min(ans,max(d1[i],up[i])); printf("%d\n",ans); return 0; }
- 1
信息
- ID
- 305
- 时间
- 1000ms
- 内存
- 128MiB
- 难度
- 7
- 标签
- 递交数
- 390
- 已通过
- 79
- 上传者