Cod sursa(job #2378128)

Utilizator braisaMiron Raisa braisa Data 11 martie 2019 18:22:33
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 400010
using namespace std;
 
struct lol {
    int x,y,c;
} M[N];
int p[200010];
bool cmp(lol l, lol r) {
    return (l.c<r.c);
}
int n,m,d,rs,k;
 
int find(int x) {
    if (x==p[x]) return x;
    else return (p[x]=find(p[x]));
}
 
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};
    } cin>>d;
    sort(M+1,M+1+m,cmp);
    for (int i=1; i<=n; ++i) p[i]=i;
    for (int i=1; i<=m && k<n; ++i) {
        int a=find(M[i].x);
        int b=find(M[i].y);
        if (a!=b) {
            p[b]=a;
            M[++k]=M[i];
            rs+=M[i].c;
        }
    }
    cout<<rs<<'\n'<<k<<'\n';
    for (int i=1; i<=k; ++i) cout<<M[i].x<<" "<<M[i].y<<'\n';
 
    return 0;
}