Cod sursa(job #2941856)

Utilizator matei0000Neacsu Matei matei0000 Data 18 noiembrie 2022 14:29:14
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.99 kb
#include <bits/stdc++.h>

using namespace std;
ifstream in("apm.in");
ofstream out("apm.out");
struct much
{
    int x,y,c;
}v[400005];
int t[200005];
much ras[200005];
bool cmp(much a, much b)
{
    return a.c<b.c;
}

int tata(int nod)
{
    if(t[nod]==nod)
        return nod;
    return t[nod]=tata(t[nod]);
}

void join(int x, int y)
{
    x=tata(x);
    y=tata(y);
    t[x]=y;
}

int main()
{
    int n,m,x,y,c;
    in>>n>>m;
    for(int i=0;i<n;i++)
        t[i]=i;
    for(int i=0;i<m;i++)
    {
        much a;
        in>>x>>y>>c;
        x--;y--;
        a.x=x;
        a.y=y;
        a.c=c;
        v[i]=a;
    }
    sort(v,v+m,cmp);
    int cnt=0,suma=0;
    for(int i=0;i<m;i++)
    {
        if(tata(v[i].x)!=tata(v[i].y))
        {
            join(v[i].x,v[i].y);
            ras[cnt++]=v[i];
            suma+=v[i].c;
        }

        if(cnt==n-1)
            break;
    }
    out<<suma<<'\n'<<n-1<<'\n';
    for(int i=0;i<n-1;i++)
        out<<ras[i].x+1<<" "<<ras[i].y+1<<'\n';
    return 0;
}