Cod sursa(job #1709897)

Utilizator TeamFIIAUAIC FIIHumvee TeamFIIA Data 28 mai 2016 14:21:24
Problema Politie Scor 100
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.33 kb
#include <iostream>
#include <map>
#include <cstdio>
#include <string>
#include <set>
#include <algorithm>
#include <vector>
#include <cstdio>
#include <cstring>
#include <queue>
using namespace std;

#define DMAX 250006
#define x first
#define y second
int rt[DMAX], n, m, p, d, q, k, x, y, a, b, t, c;

vector <pair< pair<int, int>, pair<int, int> > > v;
vector <int> ans;
int root_up(int k)
{
    if(k!=rt[k])
        rt[k]=root_up(rt[k]);
    return rt[k];
}

int main()
{
    freopen("politie.in", "r", stdin);
    freopen("politie.out", "w", stdout);

    scanf("%d %d %d %d", &n, &m, &d, &p);
    for(int i=1;i<=m;i++)
    {
        scanf("%d%d%d%d", &x, &y, &t, &c);
        v.push_back(make_pair(make_pair(t, c), make_pair(x, y)) );
    }
    for(int i=1;i<=n;i++) rt[i]=i;
    sort(v.begin(), v.end());

    for(int i=0;i<v.size();i++)
    {
        rt[v[i].y.x]=root_up(v[i].y.x);
        rt[v[i].y.y]=root_up(v[i].y.y);

        if(rt[v[i].y.x]!=rt[v[i].y.y])
        {
            rt[rt[v[i].y.y]]=rt[rt[v[i].y.x]];
        ans.push_back(v[i].x.y);
        }
    }
    sort(ans.begin(), ans.end());

    for(int i=1;i<=p;i++)
    {
        while(ans.back()==ans[ans.size()-2])
            ans.pop_back();
     printf("%d\n", ans.back());
     ans.pop_back();
    }


    return 0;
}