Pagini recente » Cod sursa (job #3243713) | Cod sursa (job #3282295) | Cod sursa (job #2220234) | Cod sursa (job #2407678) | Cod sursa (job #3242341)
#include <bits/stdc++.h>
#define ll long long
const int INF = 1000000000;
using namespace std;
ifstream fin("apm.in");
ofstream fout("apm.out");
void prim(const vector<vector<pair<int, int>>>& adj) {
int n = adj.size();
priority_queue<pair<int, int>, vector<pair<int, int>>, greater<pair<int, int>>> q;
vector<vector<pair<int, int>>> msp(n, vector<pair<int, int>>());
vector<int> parent(n, -1);
vector<int> vis(n, 0);
q.push({0, 0});
int cost = 0, size = 0;
while (!q.empty()) {
int c = q.top().first;
int u = q.top().second;
q.pop();
if (vis[u]) {
continue;
}
vis[u] = 1;
cost += c;
for (auto v : adj[u]) {
if (!vis[v.second]) {
q.push({v.first, v.second});
parent[v.second] = u;
size++;
}
}
}
fout << cost << endl;
size = 0;
//fout << size << endl;
for (int i = 0; i < n; i++) {
if (parent[i] != -1) {
size++;
}
}
fout << size << endl;
for (int i = 0; i < n; i++) {
if (parent[i] != -1) {
fout << parent[i] + 1 << " " << i + 1 << endl;
}
}
}
void solve() {
int n, m;
fin >> n >> m;
vector<vector<pair<int, int>>> adj(n, vector<pair<int, int>>());
while (m--) {
int x, y, c;
fin >> x >> y >> c;
x--;
y--;
adj[x].push_back({c, y});
adj[y].push_back({c, x});
}
prim(adj);
}
int main() {
int t = 1;
// fin >> t;
while (t--) {
solve();
}
return 0;
}