Pagini recente » Cod sursa (job #1590099) | Cod sursa (job #499816) | Istoria paginii template/preoni-2006 | Cod sursa (job #2468175) | Cod sursa (job #2425746)
#include <iostream>
#include <fstream>
#include <vector>
#include <queue>
#include <limits.h>
#define NLIM 200001
using namespace std;
ifstream f("apm.in");
ofstream g("apm.out");
int n, m, tata[NLIM], dis[NLIM], viz[NLIM];
vector< pair<int, int> > Muchii[NLIM];
struct compare {
bool operator()(pair<int,int> a, pair<int, int> b) {
return a.second > b.second;
}
};
priority_queue<pair<int,int>, vector< pair<int, int> >, compare> Coada;
void Prim(int start) {
Coada.push(make_pair(start, 0));
dis[start] = 0;
while(!Coada.empty()) {
int nod = Coada.top().first;
Coada.pop();
viz[nod] = 1;
for(int i=0; i<Muchii[nod].size(); i++) {
int vecin = Muchii[nod][i].first;
int cost = Muchii[nod][i].second;
if(!viz[vecin] && cost < dis[vecin]) {
dis[vecin] = cost;
tata[vecin] = nod;
Coada.push(make_pair(vecin, cost));
}
}
}
}
void citire() {
f >> n >> m;
for(int i=1; i<=n; i++) {
viz[i] = 0;
tata[i] = -1;
dis[i] = INT_MAX;
}
for(int i=1; i<=m; i++) {
int s, d, c;
f >> s >> d >> c;
Muchii[s].push_back(make_pair(d, c));
Muchii[d].push_back(make_pair(s, c));
}
}
void afisare() {
int sum = 0, count = 0;
for(int i=1; i<=n; i++) {
if(tata[i] != -1)
count += 1;
sum += dis[i];
}
cout << sum << '\n' << count << '\n';
for(int i=1; i<=n; i++)
if(tata[i] != -1)
cout << tata[i] << ' ' << i << '\n';
}
int main() {
citire();
Prim(1);
afisare();
return 0;
}