Cod sursa(job #1515110)

Utilizator GinguIonutGinguIonut GinguIonut Data 1 noiembrie 2015 10:09:20
Problema Arbore partial de cost minim Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#include <algorithm>
#include <vector>
#define nMax 200005
#define mMax 400005
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
int Rad[nMax], n, m, Rez, i, value1, value2, h, Ans[nMax];
int getRoot(int node)
{
    if(Rad[node]==-1)
        return node;
    return getRoot(Rad[node]);
}
struct muchii
{
    int node1;
    int node2;
    int cost;
}Edges[mMax];
int cmp(muchii o, muchii p)
{
    return o.cost<p.cost;
}
int main()
{
    fin>>n>>m;
    for(i=1;i<=m;i++)
        fin>>Edges[i].node1>>Edges[i].node2>>Edges[i].cost;
    sort(Edges+1, Edges+m+1, cmp);
    for(i=1;i<=n;i++)
        Rad[i]=-1;
    for(i=1;i<=m;i++)
    {
        value1=getRoot(Edges[i].node1);
        value2=getRoot(Edges[i].node2);
        if(value1!=value2)
        {
            Rez+=Edges[i].cost;
            Rad[value1]=value2;
            Ans[++h]=i;
        }
    }
    fout<<Rez<<'\n'<<n-1<<'\n';
    for(i=1;i<=n-1;i++)
        fout<<Edges[Ans[i]].node1<<" "<<Edges[Ans[i]].node2<<'\n';
    return 0;
}