Cod sursa(job #3266838)

Utilizator Victor_9Diaconescu Victor Victor_9 Data 10 ianuarie 2025 17:17:46
Problema Arbore partial de cost minim Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.44 kb
#include <bits/stdc++.h>
using namespace std;
const int nmax = 2e5 + 5, mmax = 4e5 + 5;

int N, M, vis[nmax], S, k, x, y, z, t[nmax], h[nmax], cost, cnt;
typedef struct poz2{
    int a, b;
}student2;
vector < student2 > ans;

typedef struct poz{
    int a, b, c;
}student;
student v[mmax];

ifstream fin("apm.in");
ofstream fout("apm.out");

////////////////////////////////////////////////////

bool comp(student x, student y){
    if(x.c <= y.c){
        return 1;
    }
    return 0;
}


int Radacina(int node){
    
    if(t[node] == node){
        return node;
    }else{
        int r = Radacina(t[node]);
        t[node] = r;
        
        return r;
    }
    
}


void Unire(int a, int b){
    
    a = Radacina(a)  , b = Radacina(b);
    
    if(h[a] < h[b]){
        t[a] = b;
        h[b] += h[a];
    }else{
        t[b] = a;
        h[a] += h[b];
    }
    
}

int main()
{
    fin>>N>>M;
    
    for(int i=1;i<=M;i++){
        fin>>v[i].a>>v[i].b>>v[i].c;
    }
    
    for(int i=1;i<=N;i++){
        t[i] = i;
        h[i] = 1;
    }
    
    sort(v+1 , v+M+1 , comp);
    
    
    for(int i=1;i<=M;i++){
        if(Radacina(v[i].a) != Radacina(v[i].b)){
            Unire(v[i].a , v[i].b);
            
            cost += v[i].c;
            cnt++;
            ans.push_back({v[i].a , v[i].b});
        }
    }
    
    fout<<cost<<"\n";
    fout<<cnt<<"\n";
    
    for(auto elem : ans){
        fout<<elem.a<<" "<<elem.b<<"\n";
    }
    
    
}