Cod sursa(job #2706395)

Utilizator NeganAlex Mihalcea Negan Data 14 februarie 2021 19:38:37
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.2 kb
#include <bits/stdc++.h>

using namespace std;


struct Muchie
{
    int x, y, val;
     bool operator<(const Muchie a) const
     {
        return val < a.val;
     }
};

ifstream fin("apm.in");
ofstream fout("apm.out");

Muchie M[410000], sol[410000];
int n, m, t[210000], k;

void Citire()
{
    int i, x, y, val;
    fin >> n >> m;
    for(i = 1;i <= m;i++)
        fin >> M[i].x >> M[i].y >> M[i].val;
}

void Union(int x, int y)
{
    t[y] = x;
}

int Find(int x)
{
    int rad;
    rad = x;
    while(t[rad] != 0)
        rad = t[rad];
    int y;
    while(x != rad)
    {
        y = t[x];
        t[x] = rad;
        x = y;
    }
    return rad;
}
int main()
{
    int i, x, y, sum = 0;
    Citire();
    sort(M + 1, M + m + 1);
    for(i = 1;i <= m;i++)
    {
        x = Find(M[i].x);
        y = Find(M[i].y);
        if(x != y)
        {
            Union(x, y);
            sol[++k].x = M[i].x;
            sol[k].y = M[i].y;
            sol[k].val = M[i].val;
            sum +=  M[i].val;
        }
    }
    fout << sum << "\n" << k << "\n";
    for(i = 1;i <= k;i++)
        fout << sol[i].x << " " << sol[i].y << "\n";
    return 0;
}