Cod sursa(job #3201808)

Utilizator bexxRebeca N bexx Data 9 februarie 2024 19:32:32
Problema Arbore partial de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.25 kb
#include <fstream>
#include <algorithm>
#include <queue>
#include <vector>
using namespace std;

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

const int N=200005;
struct idk
{
    int c,x,y;
};
int n,m,muchii,cost,t[N],r[N],d[N];
typedef pair<int,int>pii;
vector<idk>g;
vector<pii>sol;

bool cmp(idk &a,idk &b)
{
    return a.c>b.c;
}
int root(int nod)
{
    if(t[nod]==0)
        return nod;
    return root(t[nod]);
}
void citire()
{
    cin>>n>>m;
    int x,y,c;
    for(int i=0; i<m; i++)
    {
        cin>>x>>y>>c;
        g.push_back({c,x,y});
    }
    sort(g.begin(),g.begin()+m,cmp);
}
void arbore()
{
    for(int i=0; i<m; i++)
    {
        int x=g[i].x,y=g[i].y,rx=root(x),ry=root(y);
        if(rx!=ry)
        {
            if(r[x]<r[y])
            {
                r[y]+=r[x];
                t[rx]=ry;
            }
            else
            {
                r[x]+=r[y];
                t[ry]=rx;
            }
            cost+=g[i].c;
            sol.push_back({g[i].x,g[i].y});
        }
    }
}
void afisare()
{
    cout<<cost<<'\n';
    for(auto z:sol)
        cout<<z.first<<' '<<z.second<<'\n';
}
int main()
{
    citire();
    arbore();
    afisare();
    return 0;
}