Cod sursa(job #2742992)

Utilizator PredaBossPreda Andrei PredaBoss Data 22 aprilie 2021 13:45:10
Problema Politie Scor 100
Compilator cpp-64 Status done
Runda acm_2017_ubb4 Marime 1.26 kb
#include <bits/stdc++.h>
#define pii pair<int,int>
#define ppii pair<pii,pii >
using namespace std;
ifstream fin("politie.in");
ofstream fout("politie.out");
int n,m,d,p;
int x,y,t,c;
int parent[250005];
int length[250005];
int get_parent(int pos)
{
    if(pos!=parent[pos])
        parent[pos]=get_parent(parent[pos]);
    return parent[pos];
}
priority_queue<ppii,vector<ppii >,greater<ppii > >pq;
set<int>s;
int main()
{
    fin>>n>>m>>d>>p;
    for(int i=1;i<=m;i++)
    {
        fin>>x>>y>>t>>c;
        pq.push({{t,c},{x,y}});
    }
    for(int i=1;i<=n;i++)
        parent[i]=i, length[i]=1;

    int cnt=1;
    while(cnt<n && !pq.empty())
    {
        ppii now=pq.top();
        pq.pop();
        t=now.first.first;
        c=now.first.second;
        x=now.second.first;
        y=now.second.second;

        x=get_parent(x);
        y=get_parent(y);
        if(x==y)
            continue;

        if(length[x]>length[y])
            swap(x,y);

        length[y]+=length[x];
        parent[x]=y;

        s.insert(c);
        cnt++;
    }
    set<int>::iterator it=s.end();
    while(p>0)
    {
        if(it==s.begin())
            break;
        it--;
        fout<<*it<<"\n";
        p--;
    }
    return 0;
}