Pagini recente » Cod sursa (job #2753876) | Cod sursa (job #1932693) | Istoria paginii utilizator/adelalumy | Cod sursa (job #552453) | Cod sursa (job #2039540)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
/*ifstream cin ("input");
ofstream cout ("output");*/
ifstream cin ("apm.in");
ofstream cout ("apm.out");
struct edge{
int a , b , val;
} edges [400100] ;
vector <edge> ans;
int tata [200100];
int super_tata (int node){
if (tata[node] != node){
tata[node] = super_tata(tata[node]);
}
else{
return node;
}
return tata[node];
}
void unire (int a , int b){
super_tata(b);
super_tata(a);
tata[tata[b]] = tata[a];
}
bool cmp(edge a , edge b){
return a.val < b.val;
}
int main() {
ios::sync_with_stdio(false);
cin.tie(NULL);
int nodes , nr_edges;
cin>>nodes>>nr_edges;
int pos = 0;
for (int i=1; i<=nr_edges; i++){
edge now;
cin>>now.a>>now.b>>now.val;
edges[++pos] = now;
}
sort (edges + 1, edges + nr_edges + 1 , cmp);
for (int i=1; i<=nodes; i++){
tata[i] = i;
}
int cont = 0;
for (int i=1; i<=nr_edges; i++){
if (super_tata(edges[i].a) != super_tata(edges[i].b)){
cont += edges[i].val;
ans.push_back(edges[i]);
unire(edges[i].a , edges[i].b);
}
}
cout<<cont<<'\n';
cout<<ans.size()<<'\n';
for (auto &x : ans){
cout<<x.a<<" "<<x.b<<'\n';
}
return 0;
}