Cod sursa(job #3332975)

Utilizator stefantironTiron Stefan stefantiron Data 10 ianuarie 2026 11:17:00
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.14 kb
#include <fstream>
#include <vector>
#include <algorithm>

using namespace std;

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

int n,m;
int t[200001];
int siz[200001];

int cost,nrmuchii;
bool viz[400001];

struct muchie{
    int x,y,cost;
    bool operator<(muchie const& other)
    {
        return cost < other.cost;
    }

}M[400001];


int find(int u)
{
    if(t[u]==u)
        return u;
    return t[u]=find(t[u]);
}

void merge(int u,int v)
{
    u=find(u);
    v=find(v);
    if(u==v)
        return;
    if(siz[u]<siz[v])
        swap(u,v);
    t[v]=u;
    siz[u]+=siz[v];

}

int main()
{

    fin>>n>>m;
    for(int i=1;i<=m;i++)
        fin>>M[i].x>>M[i].y>>M[i].cost;
    sort(M+1,M+m+1);
    for(int i=1;i<=n;i++)
        t[i]=i;

    for(int i=1;i<=m;i++)
    {
        if(find(M[i].x)!=find(M[i].y))
        {
            cost+=M[i].cost;
            viz[i]=1;
            nrmuchii++;
            merge(M[i].x,M[i].y);
        }
    }
    fout<<cost<<'\n'<<nrmuchii<<'\n';
    for(int i=1;i<=m;i++)
    if(viz[i])
        fout<<M[i].x<<' '<<M[i].y<<'\n';
    return 0;
}