kruskal样例没过求调
查看原帖
kruskal样例没过求调
742221
Happy_Doggie楼主2024/1/23 14:34
#include<bits/stdc++.h>
using namespace std;
int n,m,ans=0,cnt=0;
int fa[200000];
struct rec {
    int t1;
    int t2;
    int t3;
}edge[200000];
bool operator <(rec a, rec b)  {
    return a.t3<b.t3;
}
int get(int x) {
    if(x==fa[x]) return x;
    return fa[x]=get(fa[x]);
}
int main() {
    cin>>n>>m;
    int cnt=0;
    for(int i=1;i<=m;i++) fa[i]=i;
    for(int i=1;i<=m;i++) {
        cnt++;
        edge[i].t1=0;
        edge[i].t2=i;
        edge[i].t3=n;
    }
    int flage;
    for(int i=1;i<=m;i++) {
        for(int j=1;j<=m;j++) {
            cin>>flage;
            if(flage) {
                cnt++;
                edge[cnt].t1=i;
                edge[cnt].t2=j;
                edge[cnt].t3=flage;
            }
        }
    }
    sort(edge+1,edge+cnt+1);
    for(int i=1;i<=m;i++) {
        int x=get(edge[i].t1); int y=get(edge[i].t2);
        if(x==y) continue;
        fa[x]=y;
        ans+=edge[i].t3;
    }
    cout<<ans<<endl;
    return 0;
}
2024/1/23 14:34
加载中...