Cod sursa(job #2115552)

Utilizator catalinpuricoicatalinpuricoi catalinpuricoi Data 26 ianuarie 2018 21:23:49
Problema Paduri de multimi disjuncte Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.12 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
int n,m,i,j,nr,t[200007],rezultat[200007],min1,max1,s;
struct muchie
{
    int x;
    int y;
    int cost;
} v[400007];
bool sortare(muchie A,muchie B)
{
    return A.cost<B.cost;
}
int main()
{
    f>>n>>m;
    for(i=1; i<=m; i++)
        f>>v[i].x>>v[i].y>>v[i].cost;
         sort(v+1,v+m+1,sortare);
    for(i=1; i<=n; i++)
        t[i]=i;
    for(i=1; i<=m; i++)
    {
        if(nr<n-1)
        {
            if(t[v[i].x]!=t[v[i].y])
            {
                min1=min(t[v[i].x],t[v[i].y]);
                max1=max(t[v[i].x],t[v[i].y]);
                for(j=1; j<=n; j++)
                {
                    if(t[j]==max1)
                        t[j]=min1;
                }
                nr++;
                rezultat[nr]=i;
            }

        }
        else
            break;
    }
    for(i=1;i<n;i++)
        s=s+v[rezultat[i]].cost;
    g<<s<<'\n';
    g<<n-1<<'\n';
    for(i=1;i<n;i++)
        g<<v[rezultat[i]].x<<' '<<v[rezultat[i]].y<<'\n';
    return 0;
}