Cod sursa(job #1258698)

Utilizator sorynsooSorin Soo sorynsoo Data 9 noiembrie 2014 11:48:15
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.14 kb
#include<cstdio>
#include <vector>
#include <algorithm>
#include <queue>
using namespace std;
struct rct
{
    int a,b,cost;
}act;
int n,m,i,j,x,y,z,p,gr[200001],nod,cost,nr;
vector<rct> muchii,rasp;
queue<int> coada;
int cmp(rct A, rct B)
{
    return A.cost<B.cost;
}
int grupa(int i)
{
    if(gr[i]==i)
        return i;
    else
        gr[i]=grupa(gr[i]);
    return gr[i];
}
int reuniune (int i, int j)
{
    gr[grupa(i)]=grupa(j);
}
int main()
{
    freopen("apm.in","r",stdin);
    freopen("apm.out","w",stdout);

    scanf("%d%d", &n, &m);
    for(i=1; i<=m; i++)
    {
        scanf("%d%d%d", &act.a, &act.b, &act.cost);
        muchii.push_back(act);
    }
    sort(muchii.begin(),muchii.end(),cmp);
    for(i=1; i<=n; i++)
        gr[i]=i;

    for(i=0; i<muchii.size(); i++)
    {
        if(grupa(muchii[i].a)!=grupa(muchii[i].b))
        {
            cost+=muchii[i].cost; nr++;
            reuniune(muchii[i].a,muchii[i].b);
            rasp.push_back(muchii[i]);
        }
    }
    printf("%d\n%d\n", cost,nr);
    for(i=0; i<rasp.size(); i++)
        printf("%d %d\n", rasp[i].a,rasp[i].b);

}