Cod sursa(job #3267109)

Utilizator tomitamateyTomita Matei tomitamatey Data 11 ianuarie 2025 09:42:35
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin ("apm.in");
ofstream cout ("apm.out");

int n,m,nr[200100],t[200100],a,b,x,y,s,f[400100],i1;
struct edge
{
    int x,y,s;
}v[400100];

bool ord (edge a,edge b)
{
    return a.s<b.s;
}

int tt (int z)
{
    int p;
    if (t[z]==z) return z;
    else
    {
        p=tt(t[z]);
        t[z]=p;
        return p;
    }

}

void unite ()
{

    if (nr[a]>nr[b])
    {
        nr[a]=nr[a]+nr[b];
        t[b]=a;
    }
    else
    {
        nr[b]=nr[b]+nr[a];
        t[a]=b;
    }

}


int main()
{
    cin>>n>>m;
    for (int i=1; i<=m; i++)
    cin>>v[i].x>>v[i].y>>v[i].s;

    sort (v+1,v+m+1,ord);

    for (int i=1; i<=n; i++) t[i]=i;
    for (int i=1; i<=m; i++)
    {
        x=v[i].x;
        y=v[i].y;
    a=tt(x);
    b=tt(y);
    if (a!=b)
    {
        s=s+v[i].s;
        f[i]=1;
        i1++;
        unite();
    }

    }
    cout<<s<<'\n';
    cout<<i1<<'\n';
    for (int i=1; i<=m; i++)
    if (f[i]) cout<<v[i].x<<" "<<v[i].y<<'\n';

    return 0;
}