最小生成树模板题
#include <bits/stdc++.h> using namespace std; struct node{ int u; int v; int w; }a[100005]; int fa[305],n,m,ans=0,tot=1; bool cmp(node x,node y){return x.w <y.w ;} int find(int x) { if(fa[x]==x) return x; else return fa[x]=find(fa[x]); } void kruskal() { for(int i=1;i<=n;i++) fa[i]=i; sort(a+1,a+m+1,cmp); for(int i=1;i<=m;i++) { if(find(a[i].u )==find(a[i].v )) continue; fa[find(a[i].u )]=find(a[i].v ); ans=max(ans,a[i].w ); tot++; if(tot==n) break; } return ; } int main() { cin>>n>>m; for(int i=1;i<=m;i++) { cin>>a[i].u >>a[i].v >>a[i].w ; } kruskal(); cout<<n-1<<" "<<ans; return 0; }
具体在最小生成树上都有讲