Cod sursa(job #2475712)

Utilizator greelioGreenio Greely greelio Data 17 octombrie 2019 13:59:31
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.84 kb
#include<bits/stdc++.h>
#define N 200010

using namespace std;

struct lol {
    int x,y,c;
} M[2*N];

int n,m,k, s,p[N];

int find(int x) {
    return (x==p[x]?x:p[x]=find(p[x]));
}

bool cmp(lol l, lol r) {
    return l.c<r.c;
}

int main() {
    ifstream cin("apm.in");
    ofstream cout("apm.out");
    cin>>n>>m;
    for (int i=1; i<=m; i++) {
        int x,y,c;
        cin>>x>>y>>c;
        M[i]={x,y,c};
    }
    for (int i=1; i<=n; i++) p[i]=i;
    sort(M+1,M+1+m,cmp);
    for (int i=1; k!=n-1; i++) {
        int x=M[i].x, y=M[i].y, c=M[i].c;
        int a=find(x), b=find(y);
        if (a!=b) {
            p[a]=b;
            M[++k] = M[i];
            s+=c;
        }
    }
    cout<<s<<"\n"<<k<<'\n';
    for (int i=1; i<=n; i++) {
        cout<<M[i].x<<" "<<M[i].y<<'\n';
    }

    return 0;
}