Pagini recente » Cod sursa (job #913199) | Cod sursa (job #1913775) | Cod sursa (job #358173) | Cod sursa (job #1226956) | Cod sursa (job #2633555)
#include <bits/stdc++.h>
#define maxn 200002
using namespace std;
ifstream fin ("apm.in");
ofstream fout ("apm.out");
typedef pair < int, int > Pair;
const int INF = INT_MAX;
int N, M, ans;
vector < Pair > G[maxn];
list < Pair > sol;
vector < vector < int > > Dist;
void Read () {
fin >> N >> M;
while (M --) {
int u, v, wt;
fin >> u >> v >> wt;
G[u].push_back ({v, wt});
G[v].push_back ({u, wt});
}
}
void Prim () {
priority_queue < Pair, vector < Pair > , greater < Pair > > Heap;
vector < int > key (N + 1, INF);
vector < int > parent (N + 1, -1);
vector < bool > viz (N + 1, false);
Heap.push ({0, 1});
key[1] = 0;
while (!Heap.empty()) {
int u = Heap.top().second;
Heap.pop();
viz[u] = true;
for (auto it : G[u]) {
int v = it.first, weight = it.second;
if (viz[v] == false && key[v] > weight) {
key[v] = weight;
Heap.push ({key[v], v});
parent[v] = u;
}
}
}
for (int i = 2; i <= N; i ++) {
sol.push_back ({parent[i], i});
for (auto it : G[parent[i]])
if (it.first == i) {
ans += it.second;
break;
}
}
}
void Solve () {
Read();
Prim();
fout << ans << '\n' << N - 1 << '\n';
for (auto it : sol)
fout << it.first << ' ' << it.second << '\n';
}
int main() {
Solve();
return 0;
}