Cod sursa(job #2857404)

Utilizator mitumitucristinaMitu Cristina mitumitucristina Data 25 februarie 2022 15:38:31
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include<algorithm>
#include<fstream>
using namespace std;
ifstream cin("apm.in");
ofstream cout("apm.out");
int sef[200001];
struct ura{
    int n1,n2,c;
    bool viz;
}v[400001];
int sefsuprem(int nod){
    if(sef[nod]==nod)
        return nod;
    else
        return sef[nod]=sefsuprem(sef[nod]);
}
void unire(int x,int y){
    int sef1=sefsuprem(x);
    int sef2=sefsuprem(y);
    sef[sef1]=sef2;
}
bool cmp(ura a, ura b){
    if(a.c<b.c)
        return true;
    return false;
}
int main(){
int n,m,i,cost=0;
cin>>n>>m;
for(int i=1;i<=m;i++)
    cin>>v[i].n1>>v[i].n2>>v[i].c;
for(int i=1;i<=n;i++){
    sef[i]=i;
}
sort(v+1,v+m+1,cmp);
int cate=0;
for(int i=1;i<=m;i++){
    if(sefsuprem(v[i].n1)!=sefsuprem(v[i].n2)){
        unire(v[i].n1,v[i].n2);
        cost+=v[i].c;
        v[i].viz=1;
        cate++;
    }
}
cout<<cost<<'\n'<<cate<<'\n';
for(int i=1;i<=m;i++)
    if(v[i].viz==1)
        cout<<v[i].n1<<" "<<v[i].n2<<'\n';
return 0;
}