Mai intai trebuie sa te autentifici.
Cod sursa(job #1795174)
| Utilizator | Data | 2 noiembrie 2016 03:11:28 | |
|---|---|---|---|
| Problema | Politie | Scor | 0 |
| Compilator | cpp | Status | done |
| Runda | Arhiva ICPC | Marime | 1.17 kb |
#include <bits/stdc++.h>
using namespace std;
vector<tuple<int, int, int, int>> v;
int N, M, D, P;
int daddy[250005];
int whos_ur_daddy(int k)
{
if(daddy[k] != k)
daddy[k] = whos_ur_daddy(daddy[k]);
return daddy[k];
}
void couple(int a, int b)
{
daddy[a] = b;
}
int main()
{
freopen("politie.in", "r", stdin);
freopen("politie.out", "w", stdout);
ios::sync_with_stdio(false);
cin >> N >> M >> D >> P;
for(int i = 1; i <= M; ++i) {
int a, b, c, d;
cin >> a >> b >> c >> d;
v.emplace_back(c, a, b, d);
}
sort(v.begin(), v.end());
for(int i = 1; i <= N; ++i)
daddy[i] = i;
set<int> dangerSet;
for(auto it : v) {
int left = get<1>(it), right = get<2>(it), cost = get<0>(it), danger = get<3>(it);
if(whos_ur_daddy(left) != whos_ur_daddy(right)) {
couple(whos_ur_daddy(left), whos_ur_daddy(right));
dangerSet.insert(-danger);
}
}
while(!dangerSet.empty() && P) {
--P;
cout << -*dangerSet.begin() << "\n";
dangerSet.erase(dangerSet.begin());
}
return 0;
}
