Cod sursa(job #1572750)

Utilizator gabib97Gabriel Boroghina gabib97 Data 19 ianuarie 2016 08:53:24
Problema Arbore partial de cost minim Scor 100
Compilator cpp Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
#include <algorithm>
using namespace std;
int nr,mx[400001],my[400001],t[100001],j,h[100001],n,u,i,ax,ay,C,r[400001],s;
struct muchie
{
    int x,y,c;
}m[400001];
bool sortare(muchie a,muchie b)
{
    return a.c<b.c;
}
int arb(int n)
{
    while (t[n])
    n=t[n];
    return n;
}
int main()
{
    ifstream fin ("apm.in");
    ofstream fout ("apm.out");
    fin>>n>>u;
    for (i=1;i<=u;i++)
    {
        nr++;
        fin>>m[nr].x>>m[nr].y>>m[nr].c;
    }
    sort(m+1,m+nr+1,sortare);
    j=0;
    //for (i=1;i<=n;i++) t[i]=i;
    for (i=1;i<n;i++)
    {
        ax=0; ay=0;
        while (ax==ay)
        {
            ax=arb(m[++j].x);
            ay=arb(m[j].y);
        }
        C+=m[j].c;
        r[++s]=j;
        if (h[ax]>h[ay]) t[ay]=ax;
        else if (h[ay]>h[ax]) t[ax]=ay;
        else
        {
            t[ax]=ay;
            h[ay]++;
        }
    }
    fout<<C<<'\n'<<s<<'\n';
    for (i=1;i<=s;i++) fout<<m[r[i]].x<<" "<<m[r[i]].y<<'\n';
    fin.close();
    fout.close();
    return 0;
}