题目描述:

现在有孤岛n个,孤岛从1开始标序一直到n,有道路m条(道路是双向的,如果有多条道路连通岛屿i,j则选择最短的那条),请你求出能够让所有孤岛都连通的最小道路总长度。

输入:

数据有多组输入。
每组第一行输入n(1<=n<=1000),m(0<=m<=10000)。
接着m行,每行输入一条道路i j d(0<=d<=1000),(i,j表示岛屿序号,d表示道路长度)。

输出:

对每组输入输出一行,如果能连通,输出能连通所有岛屿的最小道路长度,否则请输出字符串"no"。

样例输入:
3 5
1 2 2
1 2 1
2 3 5
1 3 3
3 1 2
4 2
1 2 3
3 4 1
样例输出:
3
no 求最小生成树
 #include <cstdio>
#include <algorithm>
#define max_v 1002
#define max_m 10002
struct Edge{
int from, to, dis;
};
int par[max_v];
int rank[max_v]; int cmp(const void *a, const void *b) {
Edge at = *(Edge *)a;
Edge bt = *(Edge *)b;
return at.dis - bt.dis;
}
int ini(int N) {
for(int i = ; i <= N; i++) {
par[i] = i;
rank[i] = ;
}
}
int find(int t) {
if(t == par[t]) {
return t;
}
else {
return par[t] = find(par[t]);
}
} Edge e[max_m];
int n, m;
int main(int argc, char const *argv[])
{
freopen("input.txt","r",stdin);
while(scanf("%d %d",&n,&m) != EOF) {
for(int i = ; i < m; i++) {
scanf("%d %d %d",&e[i].from, &e[i].to, &e[i].dis);
}
qsort(e, m, sizeof(Edge), cmp);
int ans = ;
int cnt = ;
ini(n);
for(int i = ; i < m; i++) {
int a = e[i].from;
int b = e[i].to;
int c = e[i].dis;
//printf("%d %d %d\n",a,b,c);
a = find(a);
b = find(b);
if(a == b) {
continue;
}
if(a != b) {
ans = ans + c;
if(rank[a] < rank[b]) {
par[a] = b;
}
else {
par[b] = a;
rank[a]++;
}
cnt++;
if(cnt == n-) {
break;
}
}
}
if(cnt == n-) {
printf("%d\n",ans);
}
else {
puts("no");
}
}
return ;
}

最新文章

  1. Server Tomcat v7.0 Server at localhost was unable to&amp;amp;nbs 报错问题解决
  2. execl表格VLOOKUP函数的使用
  3. canvas缓动2
  4. FIL Dalian Jobs
  5. lambda的Func&lt;&gt;函数
  6. POJ2516 Minimum Cost(最小费用最大流)
  7. Eclipse 反编译器
  8. BZOJ 1607: [Usaco2008 Dec]Patting Heads 轻拍牛头 筛法
  9. javascript 上传 预览图片 兼容 谷歌 ie
  10. mysql语法充电
  11. iOS 之 内存管理
  12. selenium实现自动下载文件
  13. replicated mode vs global mode - 每天5分钟玩转 Docker 容器技术(105)
  14. Android简易实战教程--第三十八话《自定义通知NotifiCation》
  15. 关闭 Mac 拼写自动纠正与横线转换
  16. RESTful-1概述
  17. 浅谈js中的this关键字
  18. ODAC(V9.5.15) 学习笔记(十四)TCRBatchMove
  19. 转Generative Model 与 Discriminative Model
  20. Select count(*)、Count(1)、Count(0)的区别和执行效率比较

热门文章

  1. hihocoder1860 最大异或和
  2. 第4章 变量、作用域和内存---JS红宝书书摘系列笔记
  3. uvm_reg_item——寄存器模型(五)
  4. 迅为10.1寸人机界面工业HMI安卓电容屏定制生产供应商
  5. Luogu P4593 [TJOI2018]教科书般的亵渎
  6. Mac如何让调整窗口大小更简单
  7. CPP-练习
  8. 解决wpf popup控件遮挡其他程序的问题
  9. a标签目标链接问题
  10. shell脚本,批量创建10个系统帐号并设置密码为随机8位字符串。