Source Code
Problem: 2395 | User: fan1913068672 | |
Memory: 15964K | Time: 141MS | |
Language: C++ | Result: Accepted |
- Source Code
#include"iostream" #include"cstdio" #include"cstring" #include"algorithm" using namespace std; const int INF = 1000000000+1; const int maxn = 2000+2; int G[maxn][maxn]; int visit[maxn]; struct Edge{ int st; int len; }Edges[maxn]; int n,m; int prim(int start){ int max_len = -1; for(int i=1;i<=n;i++){ Edges[i].st = start; Edges[i].len = INF; } visit[start] = 1; for(int i=0;i<n-1;i++){ for(int j=1;j<=n;j++){ int len = Edges[j].len; if(!visit[j]&&G[start][j]<len){ Edges[j].len = G[start][j]; Edges[j].st = start; } } int Min=INF; int Min_ed; for(int j=1;j<=n;j++){ int len = Edges[j].len; if(!visit[j]&&len<Min){ Min = len; Min_ed = j; } } start = Min_ed; visit[start] = 1; max_len = max(max_len,Min); } return max_len; } int main(){ while(cin>>n>>m) { for(int i=1;i<=n;i++){ visit[i] = 0; for(int j=1;j<=n;j++){ G[i][j] = INF; } } for(int i=0;i<m;i++){ int st,ed,len; scanf("%d%d%d",&st,&ed,&len); if(len<G[st][ed]){ G[st][ed] = len; G[ed][st] = len; } } int max_len = prim(1); cout<<max_len<<endl; } return 0; }