Cod sursa(job #1849823)

Utilizator filip.mihalutMihalut Filip filip.mihalut Data 17 ianuarie 2017 20:54:42
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.11 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#define dim 400000

using namespace std;

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

struct filip
{
    int x,y,cost;
} v[dim];

int l[dim],poz[dim];
vector < int > vec;

bool cmp(int a,int b)
{
    return v[a].cost < v[b].cost;
}

int grupa(int x)
{
    if(l[x] == x)
        return x;
    l[x] = grupa(l[x]);
    return l[x];
}

void uneste(int x,int y)
{
    l[grupa(x)] = grupa(y);
}

int main()
{
    int n,m,i,k = 0,ct = 0;
    f >> n >> m;
    for(i = 1; i <= m; i++)
        f >> v[i].x >> v[i].y >> v[i].cost,poz[i] = i;
    sort(poz + 1,poz + m + 1,cmp);
    for(i = 1;i <= n;i++)
        l[i] = i;
    for(i = 1; i <= m; i++)
        if(grupa(v[poz[i]].x) != grupa(v[poz[i]].y))
        {
            k++;
            ct += v[poz[i]].cost;
            vec.push_back(poz[i]);
            uneste(v[poz[i]].x,v[poz[i]].y);
        }
    g << ct << '\n';
    g << k << '\n';
    for(i = 0; i < vec.size(); i++)
        g << v[vec[i]].y << " " << v[vec[i]].x << '\n';
    return 0;
}