Cod sursa(job #2304056)

Utilizator mirceaisherebina mircea mirceaishere Data 17 decembrie 2018 14:34:28
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");

int n, m, i, j, x, y, cost, op, t[400100], rx, ry, k, suma;
pair<int, pair<int, int>>v[400100];
pair<int, int>sol[400100];


int radacina(int nod){
    while(t[nod]>0){
        nod=t[nod];
    }
    return nod;
}

int main(){
    fin>>n>>m;
    for(i=1; i<=n; i++){
        t[i]=-1;
    }
    for(i=1; i<=m; i++){
        fin>>v[i].second.first>>v[i].second.second>>v[i].first;
    }
    sort(v+1, v+m+1);
    for(i=1; i<=m; i++){
        x=v[i].second.first;
        y=v[i].second.second;
        cost=v[i].first;
        rx=radacina(x);
        ry=radacina(y);
        if(rx!=ry){
            if(t[rx]<t[ry]){
                t[rx]+=t[ry];
                t[ry]=rx;
            }
            else{
                t[ry]+=t[rx];
                t[rx]=ry;
            }
            k++;
            sol[k].first=x;
            sol[k].second=y;
            suma+=cost;
        }
    }
    fout<<suma<<"\n"<<k<<"\n";
    for(i=1; i<=k; i++){
        fout<<sol[i].first<<" "<<sol[i].second<<"\n";
    }
}