嗯...

题目链接:https://www.luogu.org/problemnew/show/P1111

这道题的关键是读懂题:

首先根据题中的一些扎眼的字眼我们可以判断这是一道用最小生成树来做的题...

但是注意一个东西:施工时是同时性的!!!!

所以,施工时间应该是要施工的道路中所需时间的最大值...

换句话说,就是要求我们合并时最大的边权,我们只需用一个ans来维护就行

其次,如何判断是否存在“全部公路修复完毕仍然存在两个村庄无法通车”的情况,这就要用到了生成树的概念:

在一幅图中将所有n个点连接起来的n-1条边所形成的树

而num我们存储的即为边的数量,将它与n-1进行比较即可

思路:

在最小生成树的模板的基础上进行修改,在合并x点和y点的时候用num记录所修的道路数量,用ans记录边权的最大值,上面已经说过,边权最大值即为所需的时间...最后输出时将num与n-1进行比较

AC代码:

 1 #include<cstdio>
 2 #include<iostream>
 3 #include<algorithm>
 4
 5 using namespace std;
 6
 7 int f[10005], ans;
 8 int num;
 9
10 struct node{
11     int x, y, l;
12 } a[100005];
13
14 inline int cmp(node i, node j){
15     return i.l < j.l;
16 }
17
18 inline int find(int x){
19     if(f[x] != x)
20         f[x] = find(f[x]);
21     return f[x];
22 }
23
24 int main(){
25     int n, m;
26     scanf("%d%d", &n, &m);
27     for(int i = 1; i <= n; i++)
28         f[i] = i;
29     for(int i = 1; i <= m; i++){
30         scanf("%d%d%d", &a[i].x, &a[i].y, &a[i].l);
31     }
32     sort(a+1, a+m+1, cmp);
33     for(int i = 1; i <= m; i++){
34         int r1 = find(a[i].x);
35         int r2 = find(a[i].y);
36         if(r1 != r2){
37             f[r1] = r2;
38             num++;//道路数量
39             ans = max(ans, a[i].l);//时间
40         }
41     }
42     if(num >= n - 1) printf("%d", ans);
43     else printf("-1");
44     return 0;
45 }

AC代码

转载于:https://www.cnblogs.com/New-ljx/p/10779712.html

洛谷 P1111 修复公路(最小生成树)相关推荐

  1. 洛谷 - P1111 - 修复公路 - 并查集

    https://www.luogu.org/problemnew/solution/P1111 并查集的水题,水题都错了好多发. 首先并不是有环就退出,而是连通分支为1才退出,每次合并成功连通分支才会 ...

  2. P1111 修复公路P1195 口袋的天空

    目录 P1111 修复公路 P1195 口袋的天空 P1111 修复公路 题目链接:https://www.luogu.com.cn/problem/P1111 标签:并查集,最小生成树 思路:本题用 ...

  3. 【洛谷】P1111 修复公路

    题目背景 A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你什么时 ...

  4. P1111 修复公路(并查集)

    https://www.luogu.org/problem/P1111 题目背景 AA地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数NN ...

  5. P1111 修复公路

    题目背景 A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车. 政府派人修复这些公路. 题目描述 给出A地区的村庄数N,和公路数M,公路是双向的. 并告诉你每条公路的连着哪两个村庄,并告诉你什 ...

  6. P1111 修复公路 (prim)

    题目背景 A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路. 题目描述 给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你什么时 ...

  7. [LUOGU] P1111 修复公路

    题目背景A地区在地震过后,连接所有村庄的公路都造成了损坏而无法通车.政府派人修复这些公路.题目描述给出A地区的村庄数N,和公路数M,公路是双向的.并告诉你每条公路的连着哪两个村庄,并告诉你什么时候能修 ...

  8. 【题解】luogu p1111 修复公路

    并查集 总结: 1.并查集板子掌握不熟练 #include<bits/stdc++.h> using namespace std; int n, m, fa[1005], t, sum[1 ...

  9. 洛谷P1396营救(最小生成树)

    题目描述 "咚咚咚--""查水表!"原来是查水表来了,现在哪里找这么热心上门的查表员啊!小明感动的热泪盈眶,开起了门-- 妈妈下班回家,街坊邻居说小明被一群陌生 ...

最新文章

  1. Linux下安装Redis php-redis扩展 redis重启shell脚本 超详细!
  2. 为预测用户出行需求,ofo开始使用AI实现智能调度
  3. golang 切片 slice 去掉重复元素
  4. 全球及中国原料药产业投资动态及未来运行前景分析报告2021-2027年
  5. 2015年第六届蓝桥杯C/C++ A组国赛 —— 第三题:显示二叉树
  6. linux新的API signalfd、timerfd、eventfd使用说明——eventfd
  7. lambda表达式 java 效率_Java8新特性效率之Lambda
  8. .NET Web实时消息后台服务器推送技术-GoEasy
  9. 盈利模型的内容都有哪些?
  10. 8VC Venture Cup 2016 - Final Round (Div. 2 Edition)
  11. GoodTask for mac (任务管理器)
  12. 计算机网络第七版课后习题答案(第二章)(20210628)
  13. 2021年高教杯数学建模国赛B题思路详解
  14. SSM流程及核心原理
  15. Blender导入unity——模型绑定骨骼后再导入unity,材质异常,法线翻转
  16. skynet httpc 并发发送消息崩溃问题
  17. C指针之初始化(三)
  18. 使用zabbix监控VMware
  19. (19)全民小视频引流脚本模块化开发13-界面构建与功能整合By飞云脚本学院
  20. hj212协议测试软件,环保用电在线监测设备 HJ212协议

热门文章

  1. HP小型机superdome配置MC双机、PV、VG、LV初体验
  2. Validation-jQuery表单验证插件使用方法
  3. 给自定义控件(Web Control)添加事件的几种方法。前两种方法可以不实现IPostBackEventHandler...
  4. mysql数据库实验3查询_MySQL数据库实验:任务三 数据库的单表查询设计
  5. Android开发10——Activity的跳转与传值
  6. 嵌入式Linux之我行——ARM MMU工作原理剖析
  7. Hadoop源码分析-Context
  8. MySql 创建索引原则
  9. 现在c++都转go了
  10. 各种PID算法的整理和总结