Cod sursa(job #1008213)

Utilizator cat_red20Vasile Ioana cat_red20 Data 10 octombrie 2013 17:20:00
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.28 kb
#include<fstream>
#include<algorithm>
using namespace std;
int m,n,t[200001],s;
ifstream fin("apm.in");
ofstream fout("apm.out");
struct muchie
{
    int x,y,c,sel;
}v[400001];

void Citire()
{
    fin>>n>>m;
    for(int i=1;i<=m;i++)
    {
        fin>>v[i].x>>v[i].y>>v[i].c;
    }
}

bool cmp(muchie x,muchie y)
{
    return x.c<y.c;
}

void Initializare()
{
    for(int i=1;i<=n;i++)
        t[i]=-1;
}

void Kruskal()
{
    int k=0,x,y;
    for(int i=1;i<=m && k<n;i++)
    {
        x=v[i].x;
        y=v[i].y;
        while(t[x]>0)
        {
            x=t[x];
        }
        while(t[y]>0)
        {
            y=t[y];
        }
        if(x!=y)
        {
            k++;
            s=s+v[i].c;
            v[i].sel=1;
            if(t[x]>t[y])
            {
                t[y]+=t[x];
                t[x]=y;
            }
            else
            {
                t[x]+=t[y];
                t[y]=x;
            }
        }
    }
}

void Afisare()
{
    fout<<s<<"\n"<<n-1<<"\n";
    for(int i=1;i<=m;i++)
    {
        if(v[i].sel==1)
        fout<<v[i].x<<" "<<v[i].y<<"\n";
    }
}

int main()
{
    Citire();
    sort(v+1,v+m+1,cmp);
    Initializare();
    Kruskal();
    Afisare();
    return 0;
}