Pagini recente » Istoria paginii runda/test_icrisop_2/clasament | Cod sursa (job #2013290) | fmi-no-stress-2012/solutii/parantezare | Cod sursa (job #2145891) | Cod sursa (job #1700856)
#include <iostream>
#include <fstream>
#include <set>
#include <map>
#include <deque>
using namespace std;
typedef pair<int,int> paer;
struct nod {
int key;
nod *parent = 0;
};
nod* top(nod *x) {
while (x->parent) {
x = x->parent;
}
return x;
}
int main()
{
ifstream in("apm.in");
ofstream out("apm.out");
int n, m;
in>>n>>m;
set<pair<int, paer>> muchii;
set<pair<int, paer>>::iterator it;
int x, y, c, i;
for (i=0; i<m; i++) {
in>>x>>y>>c;
paer p = paer(x, y);
muchii.insert(pair<int, paer>(c, p));
}
nod* graf[n+1];
for (i=1; i<=n; i++) {
graf[i] = new nod;
graf[i]->key = i;
}
deque<paer> deck;
int suma = 0;
for (it = muchii.begin(); it != muchii.end(); it++) {
pair<int, paer> p = *it;
x = p.second.first;
y = p.second.second;
nod *t1 = top(graf[x]), *t2 = top(graf[y]);
if (top(graf[x]) != top(graf[y])) {
suma += p.first;
t1->parent = t2;
deck.push_back(paer(p.second.first, p.second.second));
}
}
out<<suma<<endl;
out<<deck.size()<<endl;
for (i=0; i<deck.size(); i++) {
out<<deck[i].first<<" "<<deck[i].second<<endl;
}
in.close();
out.close();
return 0;
}