Cod sursa(job #2176138)

Utilizator andrei13Paval Andrei andrei13 Data 16 martie 2018 21:08:49
Problema Arbore partial de cost minim Scor 60
Compilator cpp Status done
Runda Arhiva educationala Marime 1.09 kb
#include <iostream>
#include <fstream>
#include <list>
#include <algorithm>

using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
int n,m;
struct muchii
{
    int e1;
    int e2;
    int cost;
}edge[500000];

bool cmp(muchii x,muchii y)
{
    return (x.cost<y.cost);
}
int arb[250000];
int ctotal,sol;
bool care[500001];

void kruskal()
{
    sort(edge+1,edge+m+1,cmp);
    int i,j;
    i=1,j=1;
    while(i<=n-1)
    {
        int m1=edge[j].e1;
        int m2=edge[j].e2;
        if(arb[m1]!=arb[m2])
        {
             ctotal+=edge[j].cost;
             int val=arb[m1];
             for(int k=1;k<=n;++k)
                if(arb[k]==val)
                  arb[k]=arb[m2];
            i++;
            sol++;
            care[j]=1;
        }
        j++;
    }
}

int main()
{f>>n>>m;
for(int i=1;i<=m;++i)
    f>>edge[i].e1>>edge[i].e2>>edge[i].cost;
for(int i=1;i<=n;++i)
    arb[i]=i;
kruskal();
g<<ctotal<<endl<<sol<<endl;
for(int i=1;i<=m;++i)
    if(care[i])
       g<<edge[i].e1<<' '<<edge[i].e2<<endl;

        return 0;
}