Cod sursa(job #2124931)

Utilizator albucristianAlbu Cristian-Gabriel albucristian Data 7 februarie 2018 18:46:46
Problema Politie Scor 100
Compilator cpp Status done
Runda Arhiva ICPC Marime 1.47 kb
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream in("politie.in");
ofstream out("politie.out");
struct str
{
    int x,y,tip,c;
    bool operator <(const str& other) const
    {
        if(tip==other.tip)
            return c<other.c;
        return tip<other.tip;
    }
}muchie[500002];
vector <int> sol;
int n,m,i,contor,d,p,t1,t2,nod,tata[250002],l;
void citire()
{
    in>>n>>m>>d>>p;
    for(i=1;i<=m;i++)
    {
        in>>muchie[i].x>>muchie[i].y>>muchie[i].tip>>muchie[i].c;
    }
    sort(muchie+1,muchie+m+1);
}
int tatal(int nod)
{
    if(nod!=tata[nod])
    {
        tata[nod]=tatal(tata[nod]);
    }
    return tata[nod];
}
void APM()
{
    for(i=1;i<=n;i++)
    {
        tata[i]=i;
    }
    for(i=1;i<=m;i++)
    {
        t1=tatal(muchie[i].x);
        t2=tatal(muchie[i].y);
        if(t1!=t2)
        {
            tata[t1]=t2;
            contor++;
            sol.push_back(muchie[i].c);
            if(contor==n-1)
                return;
        }
    }
}
bool desc(int a,int b)
{
    return a>b;
}
void afis()
{
    l=sol.size()+1;
    contor=0;
    sort(sol.begin(),sol.end(),desc);
    sol.push_back(0);
    i=0;
    while(i<l-1)
    {
        out<<sol[i]<<"\n";
        contor++;
        if(contor==p)
            return;
        while(sol[i]==sol[i+1])
            i++;
        i++;
    }
}
int main()
{
    citire();
    APM();
    afis();
    return 0;
}