P1111修复公路

一、题目描述

 

 

 

 二、解题思路

并查集+快速排序

  快速排序把时间少的放在前面,因为要最少时间修好,一共有n个村庄,所以只需要n-1条边即可通路,利用并查集判断是否可以达到同一个村庄,相当于需要增加1条路,当路的条数等于n-1时,便修好了。否则如果在m组公路中无法修好,那么输出-1即可。

三、代码实现

复制代码
 1 #include "bits/stdc++.h"
 2 using namespace std;
 3 struct node{
 4     int x;
 5     int y;
 6     int t;
 7 }bucket[101100];
 8 int n,m;
 9 int windows[101100];
10 bool cmp(node a,node b)
11 {
12     return a.t < b.t;
13 }
14 int find(int u)
15 {
16     if(u == windows[u])
17         return windows[u];
18     return windows[u] = find(windows[u]);
19 }
20 void merge(int n,int m)
21 {
22     int t1,t2;
23     t1 = find(n);
24     t2 = find(m);
25     windows[t2] = t1;
26 }
27 int main()
28 {
29     cin >> n >> m;
30     int ans = -1;
31     for(int i = 1;i <= 5000;i++)
32         windows[i] = i;
33     for(int i = 0;i < m;i++)
34         cin >> bucket[i].x >> bucket[i].y >> bucket[i].t;
35     sort(bucket,bucket + m,cmp);
36     int cnt = n - 1;
37     for(int i = 0;i < m;i++){//n个村庄只需要n - 1条边就可以了
38         if(find(bucket[i].x) != find(bucket[i].y)){
39             merge(bucket[i].x,bucket[i].y);
40             cnt--;
41         }
42         if(!cnt){
43             ans = bucket[i].t;
44             break;
45         }
46     }
47     cout << ans;
48     return 0;
49 }
复制代码

 

posted @   scannerkk  阅读(70)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示