Cod sursa(job #1445620)

Utilizator tudor00Stoiean Tudor tudor00 Data 30 mai 2015 15:58:55
Problema Arbore partial de cost minim Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <algorithm>
#define NMAX 400010
using namespace std;

ifstream in("apm.in");
ofstream out("apm.out");

int n,m,i,cnt=0;
int costminim=0;
long long tata[NMAX/2];
struct muchie
{
    int x,y,c;
}v[NMAX],v2[NMAX];

bool cmp(muchie a, muchie b)
{
    if(a.c<b.c) return true;
    return false;
}

int query(int x)
{
    int R=x;
    while(R!=tata[R]) R=tata[R];
    while(x!=R)
    {
        int aux=tata[x];
        tata[x]=R;
        x=aux;
    }
    return R;
}


int main()
{
    in>>n>>m;
    for(i=1;i<=n;i++) tata[i]=i;
    for(i=1;i<=m;i++)
    {
        in>>v[i].x>>v[i].y>>v[i].c;
    }
    sort(v+1,v+m+1,cmp);
    for(i=1;i<=m;i++)
    {
        if(query(v[i].x)!=query(v[i].y))
        {
            tata[query(v[i].x)]=query(v[i].y);
            costminim+=v[i].c;
            cnt++;
            v2[cnt].x=v[i].x;
            v2[cnt].y=v[i].y;
        }
    }
    out<<costminim<<'\n';
    for(i=1;i<=cnt;i++)
    {
        out<<v2[i].x<<" "<<v2[i].y<<'\n';
    }
    in.close();
    out.close();
    return 0;
}