今天!学习并查集的第一天!!
真是想不到并查集的题目是真的搞脑子啊啊啊啊啊啊!
不说了!上题解!!
#include<bits/stdc++.h>
using namespace std;
int arr[100009]={0};
int n,m;
struct loc
{
int x;//公路1
int y;//公路2
int t;//修建时长
}l[100009];
//找祖先
int find(int x)
{
if(arr[x]==x)
{
return x;
}
else
{
arr[x]=find(arr[x]);
return arr[x];
}
}
//自创函数进行排序
bool cmp(loc a,loc b)
{
return a.t<b.t;
}
//合并函数
void merge(int a,int b)
{
arr[find(a)]=find(b);
}
//判断是否通车函数
bool check()
{
int sum=0;
for(int i=1;i<=n;i++)
{
if(arr[i]==i)
{
sum++;
}
if(sum>1)
{
return 0;
}
}
return 1;//仅存在一个祖先,就能通车
}
int main()
{
cin>>n>>m;
for(int i=1;i<=n;i++)
{
arr[i]=i;
}
for(int i=1;i<=m;i++)
{
cin>>l[i].x>>l[i].y>>l[i].t;
}
sort(l+1,l+1+m,cmp);//按时间从小到大排序
for(int i=1;i<=m;i++)
{
merge(l[i].x,l[i].y);
if(check())
{
cout<<l[i].t<<endl;
return 0;
}
}
cout<<"-1"<<endl;
system("pause");
return 0;
}