Cod sursa(job #2390209)

Utilizator richardbaczur1Baczur Richard richardbaczur1 Data 27 martie 2019 20:40:50
Problema Politie Scor 100
Compilator cpp-64 Status done
Runda Arhiva ICPC Marime 1.1 kb
#include <bits/stdc++.h>
#define NMAX 250005
using namespace std;
ifstream f("politie.in");
ofstream g("politie.out");
struct drum{
    int x,y,t,c;
}d[500005];
bool cmp(const drum &d1, const drum &d2)
{
    if (d1.t!=d2.t) return d1.t<d2.t;
    return d1.c<d2.c;
}
int n,D,p,m, T[NMAX], sol[NMAX];
int find(int x)
{
    if (T[x]==x) return x;
    T[x]=find(T[x]);
    return T[x];
}
void unite(int a, int b)
{
    T[find(a)] = find(b);
}
set<int> setulLuiBaczaur;
priority_queue<int, vector<int>, less<int> > pq;
int main()
{
    f>>n>>m>>D>>p;
    for (int i=0;i<m;i++)
    {
        f>>d[i].x>>d[i].y>>d[i].t>>d[i].c;
    }
    sort(d,d+m,cmp);
    for (int i=1;i<=n;i++) T[i]=i;
    for (int i=0;i<m;i++)
    {
        if (find(d[i].x) != find(d[i].y))
        {
            setulLuiBaczaur.insert(d[i].c);
            unite(d[i].x,d[i].y);
        }
    }
    int ind=0;
    for (set<int>::iterator i = setulLuiBaczaur.begin(); i!=setulLuiBaczaur.end(); ++i) sol[ind++]=*i;
    for (int i=ind-1;i>=0 && i>=ind-p;i--)
    {
        g<<sol[i]<<"\n";
    }
    return 0;
}