Cod sursa(job #2832845)

Utilizator rafaelrafyChitan Rafael rafaelrafy Data 14 ianuarie 2022 13:51:24
Problema Politie Scor 0
Compilator cpp-64 Status done
Runda Arhiva ICPC Marime 1.15 kb
#include <fstream>
#include <iostream>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
struct nod{
    int x,y,t,c;
};
int t[250010],rang[250010];
int n,m,p,D,nr;
vector<nod>v;
map<int,int>M;
bool cmp(nod a,nod b)
{
    if(a.t != b.t)
        return a.t < b.t;
    return a.c < b.c;
}
int radacina(int x)
{
    if(t[x]==0)
        return x;
    int k=radacina(t[x]);
    t[x]=k;
    return k;
}
void uneste(int x,int y)
{
    int rx=radacina(x), ry=radacina(y);
    if(rang[rx] > rang[ry])
        t[ry]=rx;
    else if(rang[ry] > rang[rx])
        t[rx]=ry;
    else
    {
        t[ry]=rx;
        rang[rx]++;
    }
}
ifstream f("politie.in");
ofstream g("politie.out");
int main() {
    f>>n>>m>>D>>p;
    for(int i=1;i<=n;i++)
    {
        nod x;
        f>>x.x>>x.y>>x.t>>x.c;
        v.push_back(x);
    }
    sort(v.begin(),v.end(),cmp);
    for(auto it:v)
        if(radacina(it.x) != radacina(it.y))
        {
            M[it.c]=1;
            uneste(it.x, it.y);
            nr++;
            if(nr == n-1)
                break;
        }
    for(auto it=M.rbegin();it!=M.rend()&&p;it++,p--)
        g<<it->first<<'\n';
    return 0;
}