标签:
1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 using namespace std; 5 #define MAX(x,y) (x>y?x:y) 6 const int MAXN=15010; 7 struct Node{ 8 int s,e,c; 9 }; 10 int cmp(Node a,Node b){ 11 return a.c<b.c; 12 } 13 Node dt[MAXN]; 14 int pre[1010]; 15 int pt[MAXN],k,flot,as; 16 int find(int x){ 17 return pre[x]= x==pre[x]?x:find(pre[x]); 18 } 19 void add(int a,int b){ 20 pt[k++]=a;pt[k++]=b; 21 } 22 void initial(){ 23 memset(pre,0,sizeof(pre)); 24 k=0;flot=1; 25 as=-1; 26 } 27 void merge(Node a){ 28 int f1,f2; 29 if(!pre[a.s])pre[a.s]=a.s; 30 if(!pre[a.e])pre[a.e]=a.e; 31 f1=find(a.s);f2=find(a.e); 32 if(f1!=f2){ 33 add(a.s,a.e); 34 flot++; 35 as=MAX(as,a.c); 36 pre[f1]=f2; 37 } 38 } 39 int main(){int N,M; 40 while(~scanf("%d%d",&N,&M)){ 41 initial(); 42 for(int i=0;i<M;i++){ 43 scanf("%d%d%d",&dt[i].s,&dt[i].e,&dt[i].c); 44 } 45 sort(dt,dt+M,cmp); 46 for(int i=0;i<M;i++){ 47 merge(dt[i]); 48 } 49 printf("%d\n%d\n",as,k/2); 50 for(int i=0;i<k;i+=2){ 51 printf("%d %d\n",pt[i],pt[i+1]); 52 } 53 } 54 return 0; 55 }
标签:
原文地址:http://www.cnblogs.com/handsomecui/p/4728511.html