Cod sursa(job #2425571)

Utilizator alexburdescuBurdescu Alexandru alexburdescu Data 24 mai 2019 21:43:43
Problema Arbore partial de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.22 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
int N, M;
struct muchii
{
    int a,b,cost;
}graf[400005],solutie[400005];
int cost_total=0;
int Tata[200005];
int cont=0;
ifstream fin("apm.in");
ofstream fout("apm.out");
bool cmp(muchii x,muchii y)
{
    return x.cost<y.cost;
}
int root(int x)
{
    if(Tata[x]==x)
    {
        return x;
    }
    else
    {
        return Tata[x]=root(Tata[x]);
    }
}
int main()
{
    fin>>N>>M;
    for(int i=1;i<=M;i++)
    {
        fin>>graf[i].a>>graf[i].b>>graf[i].cost;
    }
    for(int i=1;i<=N;i++)
    {
        Tata[i]=i;
    }

    sort(graf+1,graf+M+1,cmp);
    for(int i=1;i<=M;i++)
    {
        cout<<graf[i].a<<" "<<graf[i].b<<" "<<graf[i].cost<<"\n";
    }
    for(int i=1;i<=M;i++)
    {
        int root1, root2;
        root1=root(graf[i].a);
        root2=root(graf[i].b);
        if(root1!=root2)
        {
            solutie[cont++]=graf[i];
            cost_total=cost_total+graf[i].cost;
            Tata[root1]=root2;
        }
    }
    fout<<cost_total<<"\n"<<cont<<"\n";
    for(int i=1;i<cont;i++)
    {
        fout<<solutie[i].a<<" "<<solutie[i].b<<"\n";
    }
    return 0;
}