Cod sursa(job #1650964)

Utilizator RaTonAndrei Raton RaTon Data 11 martie 2016 22:12:34
Problema Arbore partial de cost minim Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <algorithm>
#include<fstream>
using namespace std;
ifstream fi("apm.in");
ofstream fo("apm.out");
struct MUCHIE{
    int x, y, c;
}M[400001];
int culoare[250001];
int n, m;

bool comp( MUCHIE a, MUCHIE b ){
    return a.c < b.c;
}

int stramos( int x ){
    int start;
    start = x;
    while( culoare[x] != x )
        x = culoare[x];
    while( start != x )
        start = culoare[start];
    return x;
}

int main()
{
    int i, poz, sum;
    fi >> n >> m;

    for( i = 1; i <= m; i++ )
        fi >> M[i].x >> M[i].y >> M[i].c;
    sort(M+1, M+m+1,comp );

    for( i = 1; i <= n; i++ )
        culoare[i] = i;

    poz = 1;
    sum = 0;
    for( i = 1; i <= n - 1; i++  ){
        while( stramos(M[poz].x) == stramos(M[poz].y) )
            poz++;
        culoare[stramos(M[poz].y)] = culoare[stramos(M[poz].x)];
        sum += M[poz].c;
        M[i] = M[poz];
        poz++;
    }

    fo << sum << "\n" << n-1 << "\n";
    for( i = 1; i <= n - 1; i++ )
        fo << M[i].x << " " << M[i].y << "\n";

    return 0;
}