Qiuqiqiu  
不管道路多么崎岖坎坷,我永远不停下追逐梦想的脚步!

http://acm.hdu.edu.cn/showproblem.php?pid=1102

并查集

我的代码
 1 #include <stdio.h>
2 #include <stdlib.h>
3 const int N=110;
4 struct edge
5 {
6 int u,v,w;
7 }e[N*N];
8 int a[N][N],set[N];
9 int cmp(const void *a,const void *b)
10 {
11 return ((edge*)a)->w - ((edge*)b)->w;
12 }
13 int find(int x)
14 {
15 return set[x]==x?x:set[x]=find(set[x]);
16 }
17 int main()
18 {
19 int n,i,j,m,q,u,v,ans,fx,fy;
20 while (scanf("%d",&n)!=EOF)
21 {
22 ans=m=0;
23 for (i=1;i<=n;i++) set[i]=i;
24 for (i=1;i<=n;i++)
25 for (j=1;j<=n;j++) scanf("%d",&a[i][j]);
26 for (i=1;i<=n;i++)
27 for (j=1;j<i;j++)
28 {
29 m++;
30 e[m].u=i; e[m].v=j; e[m].w=a[i][j];
31 }
32 scanf("%d",&q);
33 while (q--)
34 {
35 scanf("%d%d",&u,&v);
36 set[find(u)]=find(v);
37 }
38 qsort(e+1,m,sizeof(e[0]),cmp);
39 for (i=1;i<=m;i++)
40 {
41 fx=find(e[i].u);
42 fy=find(e[i].v);
43 if (fx==fy) continue;
44 ans+=e[i].w;
45 set[fx]=fy;
46 }
47 printf("%d\n",ans);
48 }
49 }

 

posted on 2011-12-10 15:47  Qiuqiqiu  阅读(159)  评论(0编辑  收藏  举报