Cod sursa(job #3340478)

Utilizator Alexandra282Calin Maria Alexandra Alexandra282 Data 14 februarie 2026 16:24:37
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <iostream>
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
const int NMAX=200001,
          MMAX=400001;
int T[NMAX],nm,ct,n,m;
struct muchie
{
    int x,y,c;
    bool ok;
}M[MMAX];
int Find(int x)
{
    if(T[x]==0) return x;
    else return T[x]=Find(T[x]);
}
bool cmp(muchie a, muchie b)
{
    return a.c<b.c;
}
void citire()
{
    f>>n>>m;
    for(int i=1;i<=m;i++)
        f>>M[i].x>>M[i].y>>M[i].c;
}

void Kruskal()
{
    sort(M+1,M+m+1,cmp);
    for(int i=1;i<=m;i++)
    {
        int cx=Find(M[i].x),
            cy=Find(M[i].y);
        if(cx!=cy)
        {
            nm++;
            ct+=M[i].c;
            T[cx]=cy;
            M[i].ok=1;
            if(nm==n-1) break;
        }
    }
}
int main()
{
    citire();
    Kruskal();
    g<<ct<<'\n'<<nm<<'\n';
    for(int i=1;i<=m;i++)
        if(M[i].ok)
          g<<M[i].x<<' '<<M[i].y<<'\n';
    return 0;
}