Cod sursa(job #3246239)

Utilizator Ruxxi7Ruxandra Gheorghe Ruxxi7 Data 2 octombrie 2024 14:29:20
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.05 kb
#include <bits/stdc++.h>

using namespace std;

ifstream in("apm.in");
ofstream out("apm.out");

struct ura {
    int x,y,cost;
} v[400001],rez[400001];

int tata[200001],sol;

bool cmp(ura a,ura b) {
    if(a.cost<b.cost)
        return true;
    else
        return false;
}

int sef(int n){
    if(tata[n]==n)
        return n;
    else
        return tata[n]=sef(tata[n]);
}

void unire(int x,int y)
{
    int sef1,sef2;
    sef1=sef(x);
    sef2=sef(y);
    tata[sef2]=sef1;
}

int main() {
    int n,m,i,j;
    in>>n>>m;
    for(i=1;i<=n;++i)
        tata[i]=i;

    for(i=1; i<=m; ++i)
        in>>v[i].x>>v[i].y>>v[i].cost;
    sort(v+1,v+m+1,cmp);
    int k=0;
    for(i=1;i<=m&&k<n-1;++i)
    {
        if(sef(v[i].x)!=sef(v[i].y))
        {
            sol+=v[i].cost;
            k++;
            rez[k].x=v[i].x;
            rez[k].y=v[i].y;
            unire(v[i].x,v[i].y);
        }

    }
    out<<sol<<'\n'<<n-1<<'\n';
    for(i=1;i<n;++i)
        out<<rez[i].x<<" "<<rez[i].y<<'\n';
    return 0;
}