Time Limit: 2000/1000 MS
(Java/Others) Memory Limit: 65536/32768 K
(Java/Others)
Total Submission(s): 12967 Accepted
Submission(s): 4911
入门级题目:
1 //31MS 328K 1150B G++ 2 #include<stdio.h> 3 #include<stdlib.h> 4 struct node{ 5 int u; 6 int v; 7 int d; 8 }p[10005]; 9 int set[105],n; 10 int cmp(const void*a,const void*b) 11 { 12 return (*(node*)a).d-(*(node*)b).d; 13 } 14 inline int find(int x) 15 { 16 if(x!=set[x]) set[x]=find(set[x]); 17 return set[x]; 18 } 19 inline int merge(int x,int y) 20 { 21 int a=find(x); 22 int b=find(y); 23 if(a!=b){ 24 set[a]=b; 25 return 1; 26 } 27 return 0; 28 } 29 inline int kruskal() 30 { 31 int ans=0; 32 for(int i=0;i<n*n;i++) 33 if(merge(p[i].u,p[i].v)){ 34 ans+=p[i].d; 35 } 36 return ans; 37 } 38 int main(void) 39 { 40 int m,u,v; 41 while(scanf("%d",&n)!=EOF) 42 { 43 int k=0; 44 for(int i=0;i<=n;i++) set[i]=i; 45 for(int i=1;i<=n;i++) 46 for(int j=1;j<=n;j++){ 47 scanf("%d",&p[k].d); 48 p[k].u=i; 49 p[k].v=j; 50 k++; 51 } 52 scanf("%d",&m); 53 while(m--){ 54 scanf("%d%d",&u,&v); 55 merge(u,v); 56 } 57 qsort(p,n*n,sizeof(p[0]),cmp); 58 printf("%d\n",kruskal()); 59 } 60 return 0; 61 }
hdu 1102 Constructing Roads (最小生成树),布布扣,bubuko.com
hdu 1102 Constructing Roads (最小生成树)
原文:http://www.cnblogs.com/GO-NO-1/p/3709970.html