博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[HDU]3371 Connect the Cities
阅读量:5242 次
发布时间:2019-06-14

本文共 1597 字,大约阅读时间需要 5 分钟。

View Code
1 #include
2 #include
3 struct data{
4 int st,fi,v; 5 }a[25010]; 6 int i,j,res,ans,file,t,w1,w,father1,father2,father[510],n,m,k,flag; 7 void qsort1(int l,int r) 8 {
9 int i=l,j=r,t=a[(l+r)/2].v; 10 struct data change; 11 do{
12 while (a[i].v
t) j--; 14 if (i<=j) 15 {
16 change=a[i]; 17 a[i]=a[j]; 18 a[j]=change; 19 i++; 20 j--; 21 } 22 }while (i<=j); 23 if (l
0) 45 {
46 scanf("%d",&w); 47 father1=getfather(w); 48 for (j=2;j<=t;j++) 49 {
50 51 scanf("%d",&w1); 52 father[getfather(w1)]=father1; 53 } 54 } 55 } 56 for (i=1;i<=n;i++) 57 if (father[i]!=i) 58 {
59 res++; 60 } 61 qsort1(1,m); 62 i=1; 63 while (res
m) 75 {
76 printf("-1\n"); 77 flag=1; 78 break; 79 } 80 } 81 if (flag)continue; 82 printf("%d\n",ans); 83 } 84 return 0; 85 }

题目大意:n个城市,中间可建立m条路,且其中有k组城市已联通,问将所有城市都联通的最小代价。

大体思路:相当于是求一个部分路权为0的最小生成树。可以用Kruskal算法+并查集+排序优化。如果用并查集做的话应该可以直接将n组城市分别合到n个集合中。

注意事项:并查集合并时取“最父亲”的那个父亲,即root。

转载于:https://www.cnblogs.com/USTC-ACM/archive/2012/03/20/2408364.html

你可能感兴趣的文章
React Router 4.0 基本使用
查看>>
PHP截取中英文混合字符
查看>>
【洛谷P1816 忠诚】线段树
查看>>
电子眼抓拍大解密
查看>>
poj 1331 Multiply
查看>>
严重: 文档无效: 找不到语法。 at (null:2:19)
查看>>
tomcat7的数据库连接池tomcatjdbc的25个优势
查看>>
Html 小插件5 百度搜索代码2
查看>>
nodejs-Path模块
查看>>
P1107 最大整数
查看>>
监控CPU和内存的使用
查看>>
Ubuntu14.04设置开机自启动程序
查看>>
多进程与多线程的区别
查看>>
Ubuntu(虚拟机)下安装Qt5.5.1
查看>>
java.io.IOException: read failed, socket might closed or timeout, read ret: -1
查看>>
个人寒假作业项目《印象笔记》第一天
查看>>
java 常用命令
查看>>
CodeForces Round #545 Div.2
查看>>
卷积中的参数
查看>>
51nod1076 (边双连通)
查看>>