luogu P1111 公路修建 题解

Posted Misaka_Azusa

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了luogu P1111 公路修建 题解相关的知识,希望对你有一定的参考价值。

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

考察并查集,运用kruskal的思想很好做。注意几个小问题即可。

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<algorithm>
 4 using namespace std;
 5 int n,m,fa[1000010];
 6 int ans=0,cnt=0;
 7 struct node{
 8     int x,y,t; 
 9 }s[1000010];
10 int cmp(node a,node b)
11 {
12     return a.t<b.t;
13 }
14 int find(int x)
15 {
16     return fa[x]==x?x:fa[x]=find(fa[x]);
17 }
18 int main()
19 {
20     scanf("%d%d",&n,&m);
21     for(int i=1;i<=n;i++)
22     fa[i]=i;
23 
24     for(int i=1;i<=m;i++)
25     scanf("%d%d%d",&s[i].x,&s[i].y,&s[i].t);
26     sort(s+1,s+1+m,cmp);
27 
28     for(int i=1;i<=m;i++)
29     {
30         int xx=find(s[i].x);
31         int yy=find(s[i].y);
32         if(xx!=yy)
33         {
34             fa[yy]=xx;
35             cnt++;
36         }
37         if(cnt==n-1)//注意是点数-1,点数-1条边生成的图是树
38         {
39             cout<<s[i].t;//因为已经是排好序的,所以直接是当前的边序号
40             return 0;
41         }
42     }
43 
44     cout<<-1;
45     return 0;
46 
47 }

 

以上是关于luogu P1111 公路修建 题解的主要内容,如果未能解决你的问题,请参考以下文章

luogu_1265 公路修建

[luogu1265]公路修建

luogu P1265 公路修建 最小生成树

luogu P1265 公路修建 最小生成树

P1111 修复公路

BZOJ 1196 [HNOI2006]公路修建问题(二分答案+并查集)