Cod sursa(job #3216115)

Utilizator radu._.21Radu Pelea radu._.21 Data 15 martie 2024 17:31:08
Problema Arbore partial de cost minim Scor 100
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.09 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
struct muchie{
    int i; int j; int cost;
}v[400001];
bool cmp(muchie a,muchie b){
    return a.cost<b.cost;
}
int n,m,tata[200001];
int suma = 0 ;
vector<int>rez;
int root(int x){
    while(tata[x]>0)
        x=tata[x];
    return x;
}
void unite(int x,int y){
    if(tata[x]>tata[y])
        swap(x,y);
    tata[x]+=tata[y];
    tata[y]=x;
}
int main(){
    fin>>n>>m;
    for(int i=1;i<=m;i++)
        fin>>v[i].i>>v[i].j>>v[i].cost;
    sort(v+1,v+m+1,cmp);
    for(int i=1;i<=n;i++)
        tata[i]=-1;
    int cnt  = 0;
    for(int i=1;i<=m && rez.size()<n-1;i++){
        int x = v[i].i;
        int y = v[i].j;
        int cost = v[i].cost;
        x = root(x);
        y = root(y);
        if(x!=y){
            rez.push_back(i);
            suma+=cost;
            unite(x,y);
        }
    }
    fout<<suma<<'\n';
    fout<<n-1<<'\n';
    for(auto x : rez){
        fout<<v[x].i<<" "<<v[x].j<<'\n';
    }
    return 0;
}