Cod sursa(job #3140117)

Utilizator Darius1414Dobre Darius Adrian Darius1414 Data 3 iulie 2023 21:03:20
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.96 kb
#include <fstream>
#include <algorithm>
#define nmx 200005
using namespace std;
struct edge
{
    int a,b,pr;
};
bool cmp (const edge &a,const edge &b)
{
    return a.pr<b.pr;
}
int roo[nmx];
int root(int x)
{
    if (x==roo[x])
        return x;
    return roo[x]=root(roo[x]);
}
void join (int x,int y)
{
    if (x==y)
        return;
    roo[x]=y;
}
edge v[nmx],sol[nmx];
int n,m,sum,ct;
int main()
{
    ifstream f ("apm.in");
    ofstream g ("apm.out");
    f>>n>>m;
    for (int i=1; i<=m; i++)
        f>>v[i].a>>v[i].b>>v[i].pr;
    sort (v+1,v+m+1,cmp);
    for (int i=1; i<=n; i++)
        roo[i]=i;
    for (int i=1; i<=m; i++)
    {
        int a1=root(v[i].a);
        int b1=root(v[i].b);
        if (a1!=b1)
        {
            sum+=v[i].pr;
            sol[++ct]=v[i];
            join(a1,b1);
        }
    }
    g<<sum<<'\n'<<ct<<'\n';
    for (int i=1; i<=ct; i++)
        g<<sol[i].a<<' '<<sol[i].b<<'\n';
}