Cod sursa(job #3282625)

Utilizator Dragos__1_1Dragos Antohi Dragos__1_1 Data 6 martie 2025 12:00:01
Problema Arbore partial de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.23 kb
#include <bits/stdc++.h>
#define ll long long
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
ll t,n,m,i,j,a,b,c,d,h,parent[200006],sz[200006],mini;
struct muchie {
    ll cost;
    ll u;
    ll v;
}e[400007];
vector<muchie>ans;
int cmp(muchie a, muchie b){
    if (a.cost<=b.cost)return 1;
    return 0;
}
void make_set(ll node){
    parent[node]=node;
    sz[node]=1;
}
ll par(ll node){
    if (parent[node]==node){
        return node;
    }
        //cout<<node<<' ';
    return parent[node]=par(parent[node]);
}
void union_set(ll a,ll b,ll i){
    ll x=par(a);
    ll y=par(b);
    if (x!=y){
        if (sz[x]<sz[y])swap(x,y);
        parent[y]=x;
        sz[x]+=sz[y];
        mini+=c;
        ans.push_back({c,a,b});
    }
}
int main()
{   f>>n>>m;
    for (i=1;i<=n;i++)make_set(i);
    for (i=1;i<=m;i++){
        f>>a>>b>>c;
        e[i]={c,a,b};
    }
    sort (e+1,e+m+1,cmp);
    for (i=1;i<=m;i++){
        a=e[i].u;
        b=e[i].v;
        c=e[i].cost;
        //cout<<c<<'\n';
        union_set(a,b,i);

    }
    g<<mini<<'\n';
    g<<ans.size()<<'\n';
    //for (i=0;i<ans.size();i++){
    //    g<<ans[i].u<< ' ' <<ans[i].v<<'\n';
    //}
    return 0;
}