你不觉得这个博客太水了么?
对于我这种没前途的人,也只能靠刷水过日子了……
普通的最小生成树。
#include<cstdio> #include<cstdlib> #include<algorithm> using namespace std; int n,m,f[305]; struct Node{ int a,b,v; }a[90005]; int cmp(const void *a,const void *b){ return (*(Node *)a).v>(*(Node *)b).v?1:-1; } int Find(int i){ return i==f[i]?i:f[i]=Find(f[i]); } void Union(int sa,int sb){ if(sa>sb)f[sa]=sb; else f[sb]=sa; } int main(){ freopen("1083.in","r",stdin); freopen("1083.out","w",stdout); scanf("%d %d",&n,&m); for(int i=1;i<=n;i++)f[i]=i; for(int i=1;i<=m;i++){ scanf("%d %d %d",&a[i].a,&a[i].b,&a[i].v); } qsort(a,m,sizeof(Node),cmp); int fff=0; for(int i=1;i<=m;i++){ if(Find(a[i].a)!=Find(a[i].b)){fff++;Union(Find(a[i].a),Find(a[i].b));if(fff==n-1){printf("%d %d\n",n-1,a[i].v);}} } return 0; }