Pagini recente » Cod sursa (job #3128081) | Cod sursa (job #2693165) | Cod sursa (job #1335568) | Cod sursa (job #297740) | Cod sursa (job #3164098)
#include <iostream>
#include <queue>
#include <vector>
#include <bitset>
#include <fstream>
using namespace std;
const int N = 1e5 + 10;
vector <pair<int,int>> v[N]; /// first cost second nod
vector <int> act;
bitset <N> viz;
int tata[N];
int main() {
int n, m;
ifstream f("apm.in");
f >> n >> m;
for(int i = 1; i <= m; i++){
int x, y, z;
f >> x >> y >> z;
v[x].push_back({z, y});
v[y].push_back({z, x});
}
priority_queue <pair<int, pair<int,int>>> pq; /// cost {nod incident}
pq.push({0, {0, 1}});
int rez = 0;
while(!pq.empty()){
int nod = pq.top().second.second;
if(viz[nod]){
pq.pop();
continue;
}
tata[nod] = pq.top().second.first;
rez += (-pq.top().first);
viz[nod] = 1;
pq.pop();
for(auto vecin: v[nod]){
pq.push({-vecin.first, {nod, vecin.second}});
}
}
f.close();
ofstream g("apm.out");
g << rez << "\n" << n - 1 << "\n";
for(int i = 2; i <= n; i++){
g << i << " " << tata[i] << "\n";
}
return 0;
}