Cod sursa(job #3244032)

Utilizator CReaper1116Shang Cheng Lin CReaper1116 Data 23 septembrie 2024 08:40:13
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.08 kb
#include<bits/stdc++.h>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
const int N = 2e5;
array <int,3> e[N];
struct DSU{
    int p,sz;
}dsu[N];
vector <pair<int,int>> ans2;
int leader(int x){
    if(x == dsu[x].p)return x;
    return dsu[x].p = leader(dsu[x].p);
}
void connect(int u,int w){
    u = leader(u);
    w = leader(w);
    if(u == w)return;
    if(dsu[u].sz > dsu[w].sz)swap(w,u);
    dsu[u].p = w;
    dsu[w].sz+=dsu[w].sz;
}
int main(){
    int n,m;
    fin>>n>>m;
    for(int i = 0;i < m;i++){
        int u,w,c;
        fin>>u>>w>>c;
        u--;w--;
        e[i] = {c,u,w};
    }
    for(int i = 0;i < n;i++){
        dsu[i] = {i,1};
    }
    sort(e,e + m);
    int ans = 0;
    for(int i = 0;i < m;i++){
        if(leader(e[i][1]) != leader(e[i][2])){
            connect(e[i][1],e[i][2]);
            ans+=e[i][0];
            ans2.push_back({e[i][1] + 1,e[i][2] + 1});
        }
    }
    fout<<ans<<'\n'<<n - 1<<'\n';
    for(auto i:ans2){
        fout<<i.first<<' '<<i.second<<'\n';
    }
    return 0;
}