题意:

多组输入N,M,当N为0退出人输入,N是道路数目,M是村庄总数,随后N行,每行输入三个数两个村庄的编号,以及连接这两个村庄的费用。
对每一组数据输出畅通工程的最低费用,如果不能畅通就输出“?”(不包括双引号)

这道题有两道链接:

一道是fjut的链接,另外一道是hdu的

http://www.fjutacm.com/Problem.jsp?pid=1214

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

思路:其实这道题就是一道排序+并查集题,将每条路的费用进行排序然后依次合并,然后费用增加,当N中情况都试过了,再来一个循环判断是否全部连接。

好啦,我们来看AC代码吧:

#include<cstdio>
#include<algorithm>
#include<iostream>
#include<string.h>
using namespace std;
int fa[105];
struct node//定义这个结构体,a代表的是一个村庄的编号,b代表的是另一个村庄的编号,cost顾名思义
{int a;int b;int cost;
};
int find(int x)
{int r=x,temp;while(r!=fa[r])r=fa[r];while(x!=fa[x]){temp=fa[x];fa[x]=r;x=temp;}return x;
}
bool cmp(node x,node y)//cmp排序
{return x.cost<y.cost;
}
int main(void)
{int n,m;node cp[500];while(cin>>n>>m&&n){int sum=0;for(int i=1;i<=m;i++)fa[i]=i;for(int i=1;i<=n;i++){cin>>cp[i].a>>cp[i].b>>cp[i].cost;}sort(cp+1,cp+n+1,cmp);//排序 for(int i=1;i<=n;i++)//这个循环开始处理费用 {int x=find(cp[i].a);int y=find(cp[i].b);if(x!=y){fa[y]=x;sum+=cp[i].cost;}}int k=find(1);int flag=1;for(int i=1;i<=m;i++)//这个循环检查是否村子都连接 {if(k!=find(i)){flag=0;break;}}if(flag)cout<<sum<<endl;elsecout<<'?'<<endl;
}
return 0;
}

小结一下:这道题也算一道模版题吧,只不过可能开始有点难想,为什么要对费用排序,骑士想通了就觉得很简单,sort的自定义排序我也学了一波还是挺好用的,cmp的用法,待会我会另外写一篇博客,以供大家学习。

畅通工程(并查集模版题)相关推荐

  1. ACM: 畅通工程-并查集-解题报告

    畅通工程 Time Limit:2000MS Memory Limit:32768KB 64bit IO Format:%I64d & %I64u Description某省调查城镇交通状况, ...

  2. PIPI OJ 1118: 继续畅通工程(并查集+最小生成树)

    菜鸟生成记(18) 1118: 继续畅通工程 又双叒叕是最短路径的水题;不同的是,在构造最小生成树前,题目中已经规定一些已经建好了(这些边已经在生成树里面了);从未建好的边中选择最优边加入生成树;直到 ...

  3. NYOJ 608 畅通工程 并查集

    畅通工程 时间限制:2000 ms  |  内存限制:65535 KB 难度:3 描述 某省调查城镇交通状况,得到现有城镇道路统计表,表中列出了每条道路直接连通的城镇.省政府"畅通工程&qu ...

  4. 九度OJ 1024 畅通工程 -- 并查集、贪心算法(最小生成树)

    题目地址:http://ac.jobdu.com/problem.php?pid=1024 题目描述: 省政府"畅通工程"的目标是使全省任何两个村庄间都可以实现公路交通(但不一定有 ...

  5. 畅通工程---并查集

    畅通工程 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  6. ACM-NEFUOJ-P210畅通工程并查集

    题目:我已经明示到这个程度了你还不用并查集? #include<bits/stdc++.h>using namespace std;const int MAXN=1010;int F[MA ...

  7. HDU 1232 -畅通工程(并查集)

    题目 http://acm.hdu.edu.cn/showproblem.php?pid=1232 代码 #include <iostream> #include <algorith ...

  8. PAT题解-1118. Birds in Forest (25)-(并查集模板题)

    如题... #include <iostream> #include <cstdio> #include <algorithm> #include <stri ...

  9. 【SCAU 新生赛】18247 aler的旅游计划 并查集模板题

    18247 aler的旅游计划 该题有题解 时间限制:1000MS 代码长度限制:10KB 提交次数:15 通过次数:0 收入:10 题型: 编程题 语言: 不限定 Description aler想 ...

最新文章

  1. 清除administrator密码 方法
  2. hive数据库numeric_hive支持sql大全(收藏版)
  3. SSISDB6:参数和环境变量
  4. 刷leetcode第705题- 设计哈希集合
  5. 【STM32】FreeRTOS编码风格
  6. find 是区分大小写的。对于不区分大小写的写法(转载)
  7. 《Effective Java》 第一讲:创建和销毁对象
  8. Dubbo(九) dubbo的配置文件加载顺序优先级
  9. c++字符数组整数转换中文大写金额的形式_数字大写转换烦,内置格式多缺陷, VBA函数来解难...
  10. 但愿Fedora 10有Ubuntu Wubi安置遵命
  11. java中hashset_Java HashSet – Java中的HashSet
  12. CDP营销方案 不仅仅是数据整合
  13. 24V转5V降压芯片,24V转3.3V的稳压芯片,中文规格书
  14. TLD文件自定义标签
  15. 软件测试(敏捷开发、迭代模型)
  16. 1e9个兵临城下 - 容斥原理
  17. uint16数据的读取以及转换为uint8数据显示
  18. Android OpenGL ES(十一):绘制一个20面体
  19. 惠普总裁关于职业规划的讲座
  20. BAT批处理文本替换

热门文章

  1. 电脑一开机内存(共8G)就用了70%以上,任务管理器里面查看没有占用内存很高的进程
  2. win10 通过xrdp远程连接到ubuntu后,显示顶端快捷工具栏,显示最小化后的应用
  3. Dynamics CRM 2015/2016 Web API:Unbound Custom Action 和 Bound Custom Action
  4. PHP字符串替换函数strtr()的功能实现讲解
  5. datetime使用
  6. Python BFS 提取二值图联通域
  7. C# vs MySql
  8. 关于web页面打开空白的情况
  9. C#反射Assembly 详细说明
  10. linux系统监控、诊断工具摘录top IO wait lsof