84分,kruskal和prim都是
查看原帖
84分,kruskal和prim都是
1399242
wangnick楼主2024/7/30 17:26
#include <bits/stdc++.h>
using namespace std;
const int N = 1e5+5;
int n,m,ans,cnt,fa[N];
struct Edge
{
    int u,v,w;
} a[N*4];
bool cmp(Edge x,Edge y) 
{
    return x.w<y.w;
}
int find(int x) 
{
    if(x==fa[x]) return x;
    return fa[x]=find(fa[x]);
}
int main()
{
    cin>>n>>m;
    for(int i=1;i<=m;i++) 
    {
        cin>>a[i].u>>a[i].v>>a[i].w;
    }
    for(int i=1;i<=n;i++)
        fa[i]=i;
    sort(a+1,a+m+1,cmp);
    for(int i=1;i<=m;i++) 
    {
        int u=find(a[i].u),v=find(a[i].v);
        if(u==v) continue;
        fa[u]=v;
        cnt++;
        ans+=a[i].w;
        if(cnt==n-1)
        {
            break;
        }
    }
    if(cnt==n-1) cout<<ans;
    else cout<<"impossible";
    return 0;
}
2024/7/30 17:26
加载中...