P2330 [SCOI2005] 繁忙的都市 (最小生成树)
测试链接:https://www.luogu.com.cn/problem/P2330
结论
最小生成树一定是最小瓶颈树
题解
#include <bits/stdc++.h>
using namespace std;
const int N=1e4+10;
typedef long long ll;
struct edge
{
int u,v,w;
}edges[N];
int n,m;
int father[1000];
bool cmp(edge a,edge b)
{
return a.w<b.w;
}
void init()
{
for(int i=1;i<=n;i++)father[i]=i;
}
int find(int x)
{
return x==father[x]?x:father[x]=find(father[x]);
}
bool join(int x,int y)
{
int fx = find(x);
int fy = find(y);
// cout<<fx<<' '<<fy<<endl;
if(fx!=fy)
{
father[fx]=fy;
return true;
}
else return false;
}
int ans = -1;
int cnt=0;
int main()
{
ios::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin>>n>>m;
init();
for(int i=0;i<m;i++)
{
cin>>edges[i].u>>edges[i].v>>edges[i].w;
}
sort(edges,edges+m,cmp);
// for(int i=0;i<m;i++)cout<<edges[i].w<<' ';
for(int i=0;i<m;i++)
{
if(join(edges[i].u,edges[i].v))
{
// cout<<edges[i].u<<' '<<edges[i].v<<endl;
cnt++;
ans = max(ans,edges[i].w);
}
}
cout<<cnt<<' '<<ans<<endl;
return 0;
}

浙公网安备 33010602011771号