前言
这题的难度才是橙?
正文
题目链接:修复公路 - 洛谷
这题的思路有好多种方法,最容易想到的就是并查集了,这有点点像并查集模板,没啥好说的。
直接上AC代码:
#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+4;
struct edge{
int x,y,t;
}a[maxn];
bool cmp(edge u,edge v)
{
return u.t<v.t;
}
int n,m,pre[maxn];
int find(int x)
{
if(pre[x]==x) return x;
pre[x]=find(pre[x]);
return pre[x];
}
int main()
{
cin>>n>>m;
for(int i=1;i<=m;i++)
{
cin>>a[i].x>>a[i].y>>a[i].t;
}
sort(a+1,a+m+1,cmp);
int tot=n;
for(int i=1;i<=n;i++) pre[i]=i;
for(int i=1;i<=m;i++)
{
int u=a[i].x,v=a[i].y;
u=find(u);v=find(v);
if(u!=v)
{
pre[v]=u;
tot--;
}
if(tot==1)
{
cout<<a[i].t<<endl;
break;
}
}
if(tot>1) cout<<"-1"<<endl;
return 0;
}
结尾
大家如果想看哪一题,欢迎评论留言。