Cod sursa(job #3282603)

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