Cod sursa(job #3210827)

Utilizator NiffSniffCojocaru Calin Marcu NiffSniff Data 7 martie 2024 15:04:21
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.21 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
string file = "apm";
ifstream cin (file + ".in");
ofstream cout (file + ".out");
const int N = 200000;
int r[N+1];
struct muchie{
    int nod,cost;
};
struct linie{
    int x,y,cost;
}muchii[N*2];
struct arborica{
    int x,y;
}arbore[N-1];
vector <muchie> L[N+1];

int radacina (int x)
{
    if (r[x] == 0)
        return x;
    return (r[x] = radacina(r[x]));
}

inline bool cmp (const linie &x, const linie &y)
{
    return x.cost < y.cost;
}
int main()
{
    int n,m,x,y,z, c(0), s(0);
    cin >> n >> m;
    for (int i=0; i<m; i++)
    {
        cin >> x >> y >> z;
        L[x].push_back({y,z});
        L[y].push_back({x,z});
        muchii[i] = {x,y,z};
    }
    sort(muchii,muchii+m,cmp);
    for (int i=0; i<m; i++)
    {
        int radx = radacina (muchii[i].x), rady = radacina(muchii[i].y);
        if (radx != rady)
        {
            r[rady] = radx;
            arbore[c++] = {muchii[i].x,muchii[i].y};
            s+= muchii[i].cost;
        }
    }
    cout << s << '\n' << c;
    for (int i=0;i<c; i++)
    {
        cout << '\n' << arbore[i].x << ' ' << arbore[i].y;
    }
}