Cod sursa(job #1795175)

Utilizator gabrielinelusGabriel-Robert Inelus gabrielinelus Data 2 noiembrie 2016 03:13:02
Problema Politie Scor 100
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, d, a, b);
    }

    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<2>(it), right = get<3>(it), cost = get<0>(it), danger = get<1>(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;
}