Pagini recente » Istoria paginii runda/dopaj | Monitorul de evaluare | Monitorul de evaluare | Cod sursa (job #3146035) | Cod sursa (job #1717720)
#include <algorithm>
#include <fstream>
#include <vector>
#include <queue>
#define se second
#define fi first
#define INF 1000000000
#define DIM 1000000
using namespace std;
ifstream f("politie.in");
ofstream g("politie.out");
pair <pair <int , int> , pair <int , int> > v[DIM];
int tata[DIM] , a[DIM];
int n , m , d , p;
priority_queue <int> sol;
int query (int node) {
int cp = node;
while (tata[node] != node) {
node = tata[node];
}
while (cp != node) {
int aux = tata[cp];
tata[cp] = node;
cp = aux;
}
return node;
}
void update(int node1 , int node2 , int ind) {
int p1 = query(node1);
int p2 = query(node2);
if (p1 == p2) {
return;
}
if (a[p1] < a[p2]) {
swap(p1 , p2);
}
tata[p2] = p1;
a[p1] += a[p2];
int qq = v[ind].fi.se;
sol.push(qq);
}
int main() {
f >> n >> m >> d >> p;
for (int i = 1; i <= m; ++i) {
f >> v[i].se.fi >> v[i].se.se >> v[i].fi.fi >> v[i].fi.se;
}
sort(v + 1, v + m + 1);
for (int i = 1; i <= n; ++i) {
tata[i] = i;
}
for (int i = 1; i <= m; ++i) {
update(v[i].se.fi , v[i].se.se , i);
}
int lst = 11;
for (int i = 1; i <= p; ++i) {
int qq = sol.top();
while (!sol.empty() && sol.top() == lst) {
sol.pop();
}
lst = sol.top();
g << lst << '\n';
}
return 0;
}