Cod sursa(job #820394)

Utilizator alexalghisiAlghisi Alessandro Paolo alexalghisi Data 20 noiembrie 2012 19:51:31
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;

struct graf{int a,b,val; bool da;};
graf g[400005];
int t[200005];
int val_t[200005];

bool cmp(graf x,graf y)
{
    return x.val<y.val;
}

int tata(int nod)
{
    while(t[nod]!=nod)
        nod=t[nod];
    return nod;
}

int main()
{
    int n,m,costarb=0,c=0;
    ifstream f("apm.in");
    ofstream go("apm.out");
    f>>n>>m;
    for(int i=1;i<=m;++i)
    {
        f>>g[i].a>>g[i].b>>g[i].val;
        g[i].da=false; // la inceput nu il folosesc
        t[i]=i;
    }
    sort(g+1,g+m+1,cmp);
    for(int i=1;i<=m;++i)
    {
        int ta=tata(g[i].a);
        int tb=tata(g[i].b);
        if(ta!=tb) // sa nu faca parte din aceeasi componenta coneza / padure
        {
            costarb+=g[i].val;
            g[i].da=true;//il folosesc
            ++c;
            int nod=g[i].b;
            while(t[nod]!=nod)
            {
                int next_nod=t[nod];
                t[nod]=g[i].a; // mut tatal in stanga :-??
                nod=next_nod;
            }
            t[nod]=g[i].a;
        }
    }
    go<<costarb<<"\n"<<c<<"\n";
    for(int i=1;i<=m;i++)
        if(g[i].da==true)
            go<<g[i].a<<" "<<g[i].b<<"\n";
    return 0;
}