Cod sursa(job #2857380)

Utilizator alex.renteaRentea Bogdan Alexandru alex.rentea Data 25 februarie 2022 15:06:15
Problema Arbore partial de cost minim Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>
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;
}
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;
    for(i=1;i<m;i++)
        for(j=i+1;j<=m;j++)
            if(mu[j].cost<mu[i].cost){
                aux=mu[j];
                mu[j]=mu[i];
                mu[i]=aux;
            }
    i=1;
    while(l<n){
        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;
}