Pagini recente » Cod sursa (job #2941125) | Clasament nu_am_fost_acasa | Cod sursa (job #2081217) | Cod sursa (job #150787) | Cod sursa (job #2206753)
#include <iostream>
#include <fstream>
#include <algorithm>
#include <vector>
#define DIM 200001
int X[DIM],Y[DIM],cost[DIM],parent[DIM],ind[DIM];
std::vector<int> sol;
int n,m,sum=0;
std::ifstream f("apm.in");
std::ofstream g("apm.out");
void read(){
f>>n>>m;
for(int i=0;i<=m;i++){
f>>X[i]>>Y[i]>>cost[i];
ind[i]=i;
}
for(int i=1;i<=n;i++)
parent[i]=i;
std::sort(ind,ind+m,[&](int x, int y){
return cost[x]<cost[y];
});
f.close();
}
int find_parent(int x){
if(parent[x]==x)
return x;
return find_parent(parent[x]);
}
void unite(int x, int y){
parent[find_parent(y)]=find_parent(x);
}
void krukal(){
for(int i=0;i<m;i++){
if(find_parent(X[ind[i]])!=find_parent(Y[ind[i]])){
sol.push_back(ind[i]);
sum+=cost[ind[i]];
unite(X[ind[i]],Y[ind[i]]);
if(sol.size()==n-1) break;
}
}
}
void print(){
g<<sum<<"\n"<<n-1<<"\n";
for(int i=0;i<sol.size();i++){
g<<X[sol[i]]<<" "<<Y[sol[i]]<<"\n";
}
}
int main() {
read();
krukal();
print();
return 0;
}