Cod sursa(job #1547319)

Utilizator DobosDobos Paul Dobos Data 9 decembrie 2015 11:50:01
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.07 kb
#include <bits/stdc++.h>

using namespace std;
#define f first
#define s second
ifstream fin("apm.in");
ofstream fout("apm.out");
const int NMAX = 200005;
struct Speranta{
int cost,x,y;
}v[NMAX * 2];
vector < int > sol;
int G[NMAX];
bool cmp(const Speranta A , const Speranta B){
        return (A.cost < B.cost);
}
int Grup(int nod){
    if(nod == G[nod])
        return nod;
    G[nod] = Grup(G[nod]);
    return G[nod];
}
void reuniunion(int x, int y){
    G[Grup(y)] = Grup(x);
}
int main()
{
    int n,m,x,y,c;
    fin >> n >> m;
    for(int  i = 1; i <= m; i++){
        fin >> v[i].x >> v[i].y >> v[i].cost;
    }
    sort(v + 1,v + m + 1,cmp);
    c = 0;
    for(int i = 1; i <= n;i++)
        G[i] = i;
    for(int i = 1; i <= m;i++){
        if(Grup(v[i].x) != Grup(v[i].y)){
            c += v[i].cost;
            reuniunion(v[i].x,v[i].y);
            sol.push_back(i);
        }
    }
    fout << c << "\n" << n - 1;
    for(int i = 0; i < sol.size();i++)
        fout << "\n" << v[sol[i]].x << " " << v[sol[i]].y;
    return 0;
}