P2330 [SCOI2005]繁忙的都市

最小生成树模板题

#include <bits/stdc++.h>
using namespace std;
struct node{
    int u; int v; int w;
}a[100005];
int fa[305],n,m,ans=0,tot=1;
bool cmp(node x,node y){return x.w <y.w ;}
int find(int x)
{
    if(fa[x]==x) return x;
    else return fa[x]=find(fa[x]);
}
void kruskal()
{
    for(int i=1;i<=n;i++)
    fa[i]=i;
    sort(a+1,a+m+1,cmp);
    for(int i=1;i<=m;i++)
    {
        if(find(a[i].u )==find(a[i].v )) continue;
        fa[find(a[i].u )]=find(a[i].v );
        ans=max(ans,a[i].w );
        tot++;
        if(tot==n) break;
    } 
    return ;
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        cin>>a[i].u >>a[i].v >>a[i].w ;
    }
    kruskal();
    cout<<n-1<<" "<<ans;
    return 0;
}

具体在最小生成树上都有讲

posted @ 2019-12-06 21:09  小霜降  阅读(139)  评论(0编辑  收藏  举报