Pagini recente » Cod sursa (job #2023739) | Cod sursa (job #1448726) | Cod sursa (job #3342300) | Cod sursa (job #1995646) | Cod sursa (job #3325744)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
#define NMAX 200001
int tata[NMAX];
int rang[NMAX];
int cost;
vector<pair<int, pair<int, int>>> G;
vector<pair<int, int>> muchii;
int radacina(int k) {
if(tata[k] == k) {
return k;
}
return tata[k] = radacina(tata[k]);
}
void unire(int k, int p) {
if(rang[k] < rang[p]) {
tata[k] = p;
}
else {
tata[p] = k;
if(rang[k] == rang[p]) {
rang[p]++;
}
}
}
void kruskal(int n, int m) {
for(int i = 1; i<=n; i++) {
tata[i] = i;
rang[i] = 1;
}
sort(G.begin(), G.end());
for(int i = 0; i<m; i++) {
int x = G[i].second.first;
int y = G[i].second.second;
int rad1 = radacina(x);
int rad2 = radacina(y);
if(rad1 != rad2) {
cost += G[i].first;
muchii.push_back({x, y});
unire(rad1, rad2);
}
}
}
int main() {
int n, m, c, x, y;
fin>>n>>m;
for(int i = 0; i<m; i++) {
fin>>x>>y>>c;
G.push_back({c, {x, y}});
}
kruskal(n, m);
fout<<cost<<'\n'<<muchii.size()<<'\n';
for(auto it : muchii) {
fout<<it.first<<" "<<it.second<<'\n';
}
return 0;
}