Cod sursa(job #408656)

Utilizator dead_knightTitei Paul Adrian dead_knight Data 3 martie 2010 10:06:48
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.19 kb
#include<cstdio>
#define MAX 200005
#include <algorithm>
#include<vector>
#include<fstream>
using namespace std;
struct muchie{
    int i,j,c;
    friend bool operator <(const muchie a, const muchie b)
    {
        return a.c<b.c;
    }
};

muchie v[400005];
int n,m,a[MAX],t[MAX],h[MAX],na;

int radacina(int x)
{
    int y=x,tmp;
    while(t[x]!=0)//gasesc radacina;
        x=t[x];
    while(t[y])
        tmp=t[y],t[y]=x,y=tmp;//la toate muchiile pana la radacina ii dau tatal radacina;
    return x;
}

int main()
{
    int i,s=0;
    ifstream fin("apm.in");
    fin>>n>>m;
    for(i=1;i<=m;i++)
        fin>>v[i].i>>v[i].j>>v[i].c;
    sort(v+1,v+m+1);
    for(i=1;i<=m;i++)
    {
        int ri=radacina(v[i].i),rj=radacina(v[i].j);
        if(ri!=rj)
        {
            a[++na]=i;
            if(h[ri]<h[rj])
                t[ri]=rj;
            else if(h[rj]<h[ri])
                t[rj]=ri;
            else
                t[ri]=rj,h[rj]++;
        }
    }
    for(i=1;i<=na;i++)
        s+=v[a[i]].c;
    ofstream fout("apm.out");
    fout<<s<<"\n"<<na<<"\n";
    for(i=1;i<=na;i++)
        fout<<v[a[i]].i<<" "<<v[a[i]].j<<"\n";
    return 0;
}