Cod sursa(job #2864392)

Utilizator NeganAlex Mihalcea Negan Data 7 martie 2022 20:37:03
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.19 kb
#include <bits/stdc++.h>

using namespace std;

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

int n, m, t[200005], viz[400005];

struct Muchie
{
    int x, y, cost;
    bool operator < (const Muchie &A) const
    {
        return A.cost > cost;
    }
};

Muchie M[400005];
void Citire()
{
    int x, y, cost, i;
    fin >> n >> m;
    for(i = 1;i <= m;i++)
        fin >> M[i].x >> M[i].y >> M[i].cost;
    sort(M + 1, M + m + 1);
}
void Union(int x, int y)
{
    t[y] = x;
}

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