Pagini recente » Cod sursa (job #525406) | Cod sursa (job #2159394) | Cod sursa (job #3226723) | Cod sursa (job #2941459) | Cod sursa (job #3225411)
#include <bits/stdc++.h>
//#include <bits/extc++.h>
#define pii pair<int, int>
#define ff first
#define ss second
#define vi vector<int>
#define vvi vector<vi>
#define pb push_back
#define FOR(i, a, b) for(int i = a; i <= b; ++i)
#define FORR(i, a, b) for(int i = a; i >= b; --i)
#define vpi vector<pii>
#define vvpi vector<vpi>
#define ll long long
#define double long double
#define eb emplace_back
//#define int long long
using namespace std;
//using namespace __gnu_pbds;
const string TASK("apm");
ifstream fin(TASK + ".in");
ofstream fout(TASK + ".out");
#define cin fin
#define cout fout
const int N = 2e5 + 9, Inf = 0x3f3f3f3f;
int n, m;
bool viz[N];
vvpi G(N);
void solve()
{
cin >> n >> m;
int x, y, c;
FOR(i, 1, m)
{
cin >> x >> y >> c;
G[x].eb(y, c);
G[y].eb(x, c);
}
vpi ans;
int cst = 0;
priority_queue<pair<int, pii>, vector<pair<int, pii>>, greater<pair<int, pii>>> q;
q.push({0, {1, -1}});
while(!q.empty())
{
int dx = q.top().ff, x = q.top().ss.ff, t = q.top().ss.ss;
q.pop();
if(viz[x])continue;
cst += dx;
viz[x] = true;
ans.pb({x, t});
for(auto [y, c] : G[x])
if(!viz[y])
q.push({c, {y, x}});
}
cout << cst << '\n';
ans.erase(ans.begin());
cout << ans.size() << '\n';
for(auto i : ans)cout << i.ff << ' ' << i.ss << '\n';
}
signed main()
{
// cin >> p;
int t = 1;
// cin >> t;
// cout << fixed << setprecision(12);
while(t --)
solve();
return 0;
}