44分求助

P3366 【模板】最小生成树

dp_hater @ 2023-07-04 16:14:01

#include<bits/stdc++.h>
using namespace std;
#define int long long
typedef unsigned long long sln;
int n,m; 
int fa[10005];
struct Edge{
    int u,v,w; 
}e[10005];
bool cmp(Edge x,Edge y){
    return x.w<y.w;
}
void init(){
    for(int i=1;i<=n;i++){
        fa[i]=i;
    }
}
int Find(int v){
    if(fa[v]==v) return v; 
    else{
        fa[v]=Find(fa[v]);
        return v;
    }
}
bool unite(int x,int y){
    int t1,t2;
    t1=Find(fa[x]);
    t2=Find(fa[y]);
    if(t1!=t2){
        fa[t2]=t1;
        return 1;
    }
    else return 0;
}
signed main(){
    cin>>n>>m;
    init();
    for(int i=1;i<=m;i++)
        cin>>e[i].u>>e[i].v>>e[i].w;
    sort(e+1,e+m+1,cmp);
    int ans=0,cnt=n;
    for(int i=1;i<=m;i++){
        if(unite(e[i].u,e[i].v)){
            ans+=e[i].w;
            cnt--;
            if(cnt==1) break; 
        }
    }
    if(cnt==1) cout<<ans;
    else cout<<"orz";
    cout<<endl;
    return 0;
}

5AC 3WA 5MLE


|