Pagini recente » Cod sursa (job #505382) | Cod sursa (job #2998359) | Cod sursa (job #629479) | Cod sursa (job #2957221) | Cod sursa (job #2042522)
#include <bits/stdc++.h>
using namespace std;
typedef pair<int, int> pii;
struct Muchie
{
int a, b, c;
int other(int x)
{
return x == a ? b : a;
}
};
bool cmp(const Muchie& a, const Muchie& b)
{
return a.c > b.c;
}
int n, m;
vector<Muchie> q;
vector<Muchie> rez;
vector<pii> v[200001];
int viz[200001];
int dist;
int main()
{
freopen("apm.in", "r", stdin);
freopen("apm.out", "w", stdout);
scanf("%d%d", &n, &m);
int a, b, c;
for(int i = 0; i < m; i++)
{
scanf("%d%d%d", &a, &b, &c);
a--; b--;
v[a].push_back(make_pair(b, c));
v[b].push_back(make_pair(a, c));
}
viz[0] = 1;
for(int i = 0; i < v[0].size(); i++)
{
q.push_back({0, v[0][i].first, v[0][i].second});
push_heap(q.begin(), q.end(), cmp);
}
for(int i = 0; i < n - 1; i++)
{
Muchie top = q[0];
pop_heap(q.begin(), q.end(), cmp);
q.pop_back();
if(viz[top.b])
{
i--;
continue;
}
viz[top.b] = 1;
dist += top.c;
rez.push_back(top);
for(int j = 0; j < v[top.b].size(); j++)
{
if(viz[v[top.b][j].first] == 0)
{
q.push_back({top.b, v[top.b][j].first, v[top.b][j].second});
push_heap(q.begin(), q.end(), cmp);
}
}
}
printf("%d\n%d\n", dist, n - 1);
for(int i = 0; i < n - 1; i++)
printf("%d %d\n", rez[i].a + 1, rez[i].b + 1);
return 0;
}