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;
}
posted @ 2025-07-18 10:35  屈臣  阅读(9)  评论(0)    收藏  举报