Pagini recente » Cod sursa (job #2269708) | Cod sursa (job #55068) | Cod sursa (job #883619) | Cod sursa (job #1077294) | Cod sursa (job #2729770)
#include <iostream>
#include <fstream>
#include <queue>
#include <vector>
using namespace std;
ifstream in("apm.in");
ofstream out("apm.out");
const int INF = 0x3f3f3f3f3f3f3f3f;
int n, m, total;
int father[200100];
bool use[200100];
vector<vector<pair<int, int>>> adj;
void prim()
{
vector<int> e(n, INF);
e[1] = 0;
for(int step = 1; step <= n; step++)
{
int mini = INF, v;
for(int i = 1; i <= n; i++)
{
if(!use[i] && e[i] < mini)
{
mini = e[i];
v = i;
}
}
use[v] = 1;
total += mini;
for(auto it: adj[v])
{
if(!use[it.first] && it.second < e[it.first])
{
e[it.first] = it.second;
father[it.first] = v;
}
}
}
out << total << '\n' << n - 1 << '\n';
for(int i = 2; i <= n; i++)
out << i << ' ' << father[i] << '\n';
}
int main()
{
in >> n >> m;
adj.resize(n + 5);
for(int i = 1; i <= m; i++)
{
int x, y, cost;
in >> x >> y >> cost;
adj[x].emplace_back(y, cost);
adj[y].emplace_back(x, cost);
}
prim();
return 0;
}