P2330 [SCOI2005]繁忙的都市

最小生成树模板题

#include 
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<1<<" "<<ans;
    return 0;
}

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

你可能感兴趣的:(P2330 [SCOI2005]繁忙的都市)