Cod sursa(job #2857392)

Utilizator alex.renteaRentea Bogdan Alexandru alex.rentea Data 25 februarie 2022 15:23:10
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream cin("apm.in");
ofstream cout("apm.out");
int n,m,tata[200001];
struct ura{
    int x,y,cost;
    bool vf;
}mu[400001],aux;
int sef(int x){
    if(x==tata[x])
        return x;
    else
        return tata[x]=sef(tata[x]);
}
void unire(int x,int y){
    x=sef(x);
    y=sef(y);
    tata[y]=x;
}
bool comp(ura a,ura b){
    return a.cost<b.cost;
}
int main()
{
    int i,j,l=0,pret=0;
    cin>>n>>m;
    for(i=1;i<=n;i++)
        tata[i]=i;
    for(i=1;i<=m;i++)
        cin>>mu[i].x>>mu[i].y>>mu[i].cost;
    sort(mu+1,mu+m+1,comp);
    i=1;
    while(l<n&&i<=m){
        if(sef(mu[i].x)!=sef(mu[i].y)){
            mu[i].vf=1;
            unire(mu[i].x,mu[i].y);
            l++;
            pret=pret+mu[i].cost;
        }
        i++;
    }
    cout<<pret<<'\n'<<n-1<<'\n';
    for(i=1;i<=m;i++)
        if(mu[i].vf==1)
            cout<<mu[i].x<<' '<<mu[i].y<<'\n';
    return 0;
}