Cod sursa(job #1921419)

Utilizator raduaxel1Dilirici Radu raduaxel1 Data 10 martie 2017 12:37:13
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.04 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;

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

struct muchii
{
    int nod1, nod2, cost, folosit;
}v[400003], aux;

int n, m, x, y, nr, suma;
int N[200003];

int parinte(int a){
    while (N[a]!=N[N[a]])
        N[a]=N[N[a]];
    return N[a];
}

bool comp(muchii i, muchii j)
{
    return i.cost<j.cost;
}

int main()
{
    fin>>n>>m;
    for (int i=1; i<=m; i++){
        fin>>v[i].nod1>>v[i].nod2>>v[i].cost;
    }
    sort(v+1, v+m+1, comp);
    for (int i=1; i<=n; i++)
        N[i]=i;
    for (int i=1; i<=m; i++){
        int rx, ry;
        rx=parinte(v[i].nod1);
        ry=parinte(v[i].nod2);
        if (rx!=ry){
            suma+=v[i].cost;
            nr++;
            N[rx]=ry;
            v[i].folosit=1;
        }
    }
    fout<<suma<<"\n";
    fout<<nr<<"\n";
    for (int i=1; i<=m; i++){
        if (v[i].folosit==1){
            fout<<v[i].nod1<<" "<<v[i].nod2<<"\n";
        }
    }
    return 0;
}