Cod sursa(job #1650935)

Utilizator ErikHEErik Henning ErikHE Data 11 martie 2016 21:54:25
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1 kb
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

ifstream f("apm.in");
ofstream g("apm.out");
int x[400003],y[400003],c[400003],ind[400003];
int gr[400003];
int n,m,sol;
vector<int> arb;

bool comp(int i,int j)
{
    return c[i]<c[j];
}

int grup(int nod)
{
    if(gr[nod]==nod) return nod;
    gr[nod]=grup(gr[nod]);
    return gr[nod];
}

void unite(int a,int b)
{
    gr[b]=a;
}

int main()
{
    int i;
    f>>n>>m;
    for(i=1;i<=m;i++)
    {
        f>>x[i]>>y[i]>>c[i];
        ind[i]=i;
    }

    for(i=1;i<=m;i++)
        gr[i]=i;
    sort(ind+1,ind+m+1,comp);

    for(i=1;i<=m;i++)
        if( grup( x[ind[i]]) != grup( y[ind[i]] ))
        {
            sol+=c[ind[i]];
            unite( grup( x[ind[i]]), grup(y[ind[i]]));
            arb.push_back(ind[i]);
        }

    g<<sol<<"\n"<<arb.size()<<"\n";

    for(i=0;i<arb.size();i++)
        g<<y[arb[i]]<<"\t"<<x[arb[i]]<<"\n";

    return 0;
}