B - 交通改造
最小生成树问题。将路口视为点,道路视为边建图,裸的最小生成树问题。
#include<bits/stdc++.h>
using namespace std;
const int N = 310;
struct stu{
int u,v,c;
};
int f[N];
int find(int x)
{
return f[x]==x?x:f[x]=find(f[x]);
}
void merge(int x,int y)
{
x=find(x),y=find(y);
if(x==y) return;
f[x]=y;
}
signed main()
{
int n,m;cin>>n>>m;
vector<stu> a(m);
for(int i=0;i<m;i++)
{
int u,v,c;cin>>u>>v>>c;
a[i]={u,v,c};
}
for(int i=0;i<n;i++) f[i]=i;
sort(a.begin(),a.end(),[&](stu A,stu B){
return A.c<B.c;
});
int sum=0,mx=0;
for(int i=0;i<m;i++)
{
if(find(a[i].u)!=find(a[i].v))
{
merge(a[i].u,a[i].v);
if(mx<a[i].c) mx=a[i].c;
sum++;
}
}
cout<<sum<<" "<<mx<<endl;
return 0;
}