Pagini recente » Cod sursa (job #826539) | Cod sursa (job #740554) | Cod sursa (job #1130339) | Cod sursa (job #2462714) | Cod sursa (job #1709271)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("politie.in");
ofstream fout("politie.out");
const int MAXN = 250100;
struct muchie {
int x, y;
int d, p;
muchie (int _x, int _y, int _d, int _p) {
x = _x;
y = _y;
d = _d;
p = _p;
}
};
int n, m, d, p;
vector<muchie> v;
bool cmp(muchie a, muchie b) {
if (a.d == b.d)
return a.p < b.p;
return a.d < b.d;
}
int padure[MAXN];
int get_radacina(int nod) {
if (nod == padure[nod])
return nod;
padure[nod] = get_radacina(padure[nod]);
return padure[nod];
}
void unite(int a, int b) {
padure[get_radacina(a)] = get_radacina(b);
}
vector<int> pericole;
int main()
{
fin >> n >> m >> d >> p;
for (int i = 1; i <= m; ++i) {
int x, y, d, p;
fin >> x >> y >> d >> p;
v.push_back(muchie(x, y, d, p));
}
sort (v.begin(), v.end(), cmp);
for (int i = 0; i <= n; ++i)
padure[i] = i;
int maxPericol = 0;
for (int i = 0; i < v.size(); ++i) {
muchie nod = v[i];
if (get_radacina(nod.x) != get_radacina(nod.y)) {
pericole.push_back(nod.p);
unite(nod.x, nod.y);
}
}
sort (pericole.begin(), pericole.end(), greater<int>());
for (int i = 0; (i < pericole.size() - 1 ) && p; ++i) {
if (pericole[i] != pericole[i + 1]) {
fout << pericole[i] << "\n";
--p;
}
}
if (p)
fout << pericole[pericole.size() - 1] << "\n";
return 0;
}