很简单的一道题,代码附上:
#include<stdio.h> #include<algorithm> using namespace std; int num[10002]; struct road { int x; int y; int len; } p[10001]; int cmp(struct road a,struct road b) { return a.len<b.len; } int find(int a) { return a==num[a]?a:find(num[a]); } int main() { int n,m; while(scanf("%d",&n),n) { int i,a,b,res=0; for(i=0; i<(n*(n-1))/2; i++) scanf("%d%d%d",&p[i].x,&p[i].y,&p[i].len); sort(p,p+(n*(n-1))/2,cmp); for(int j=1; j<=n; j++) num[j]=j; for(int j=0; j<(n*(n-1))/2; j++) { a=find(p[j].x); b=find(p[j].y); if(a!=b) { num[a]=b; res+=p[j].len; } } printf("%d\n",res); } return 0; }