Cod sursa(job #1829094)

Utilizator filip.mihalutMihalut Filip filip.mihalut Data 14 decembrie 2016 13:02:55
Problema Arbore partial de cost minim Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#define dim 200001

using namespace std;

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

struct filip
{
    int x,y,c;
}v[400001];

int n,m,i,poz[2*dim],k,ix,iy,cost,j,l[2*dim];
vector < pair < int,int > > vec;

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

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

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

int main()
{
    f >> n >> m;
    for(i = 1;i <= m;i++)
        f >> v[i].x >> v[i].y >> v[i].c,poz[i] = i,l[i] = i;
    sort(poz + 1,poz + m + 1,cmp);
    for(i = 1;k < n - 1 && i <= m;i++)
    {
        ix = v[poz[i]].x;
        iy = v[poz[i]].y;
        if(grupa(ix) != grupa(iy))
        {
            k++;
            cost += v[poz[i]].c;
            vec.push_back(make_pair(v[poz[i]].x,v[poz[i]].y));
            cauta(v[poz[i]].x,v[poz[i]].y);
        }
    }
    g << cost << '\n' << k << '\n';
    for(i = 0;i < k;i++)
        g << vec[i].first << " " << vec[i].second << '\n';
    return 0;
}