很早以前WA掉的,今天改都没改交了,A了,我很费解,很愤慨 = =。。
不解释。
#include <stdio.h> #include <stdlib.h> #include <iostream> #include <memory.h> #include <limits.h> #define N 1001 using namespace std; struct edge { int x,y,len; }hub[15001]; typedef struct edge NODE; int n,m,pre[N],put[1501]; void input() { int i; for(i=1; i<=m; i++) scanf("%d %d %d",&hub[i].x,&hub[i].y,&hub[i].len); } int cmp(const void *a, const void *b) { return ((NODE*)a)->len > ((NODE*)b)->len ? 1 : -1 ; } int find(int x) { while( x!= pre[x] ) x = pre[x]; return x; } void kruskal() { int count = 0,max = -1,i; for(i=1; i<=n; i++) pre[i] = i; qsort( hub+1 ,m ,sizeof(NODE), cmp); for(i=1; i<=m ;i++) { int a = find( hub[i].x ); int b = find( hub[i].y ); if( a!= b) { if( hub[i].len > max ) max = hub[i].len; pre[b] = a; put[++count] = i; } } printf("%d/n%d/n",max,count); for(i=1; i<=count; i++) printf("%d %d/n",hub[put[i]].x,hub[put[i]].y); } int main(void) { while( scanf("%d %d",&n,&m)!=EOF ) { input(); kruskal(); } return 0; }