Cod sursa(job #3317797)

Utilizator MirceaCUCUSirghe Mircea Anton MirceaCUCU Data 25 octombrie 2025 13:19:00
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include <iostream>
#include <fstream>
#include <algorithm>

using namespace std;

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

int sef[200001];

int muchie[200001];

struct nume
{
    int cost, x, y;
}v[400001];

int k=0, coster=0;

bool cmp(nume a, nume b)
{
    return a.cost<b.cost;
}

int boss(int x)
{
    if(sef[x]==x)
        return x;
    else
        return sef[x]=boss(sef[x]);
}

void unire(int x, int y)
{
    sef[boss(y)]=boss(x);
}

int main()
{
    int n,m;
    in>>n>>m;
    for(int i=1;i<=n;i++)
    {
        sef[i]=i;
    }
    for(int i=1;i<=m;i++)
    {
        in>>v[i].x>>v[i].y>>v[i].cost;
    }
    sort(v+1, v+m+1, cmp);
    for(int i=1;i<=m && k<n-1;i++)
    {
        int xp=boss(v[i].x), yp=boss(v[i].y);
        if(xp!=yp)
        {
            k++;
            coster+=v[i].cost;
            muchie[k]=i;
            unire(xp, yp);
        }
    }
    out<<coster<<'\n';
    out<<n-1<<'\n';
    for(int i=1;i<=n-1;i++)
    {
        out<<v[muchie[i]].x<<" "<<v[muchie[i]].y<<'\n';
    }
    return 0;
}