Cod sursa(job #812120)

Utilizator marinutzacatana marina marinutza Data 13 noiembrie 2012 15:30:28
Problema Arbore partial de cost minim Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 0.92 kb
#include<fstream>
#include<algorithm>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
#define nmax 200010
#define mmax 400010
int n,m,t[nmax],ct,nr,i,r1,r2;
struct muchie
{
    int x,y;
    int cost;
    bool ok;
} v[mmax];
int rad(int x)
{
    if(t[x]==0)
        return x;
    else
        return rad(t[x]);
}
bool cmp(muchie a,muchie b)
{
    return a.cost<b.cost;
}
void citire()
{
    f>>n>>m;
    for(int i=1;i<=m;i++)
        f>>v[i].x>>v[i].y>>v[i].cost;
}
int main()
{
    citire();
    sort(v+1,v+m+1,cmp);
    for(i=1;nr!=n-1;i++)
    {
        r1=rad(v[i].x);
        r2=rad(v[i].y);
        if(r1!=r2)
        {
            ct+=v[i].cost;
            nr++;
            v[i].ok=1;
            t[r1]=r2;
        }
    }
    g<<ct<<'\n'<<n-1<<'\n';
    for(i=1;i<=m;i++)
    {
        if(v[i].ok==1)
            g<<v[i].x<<' '<<v[i].y<<'\n';
    }
    return 0;
}