Cod sursa(job #1711551)

Utilizator Alexa2001Alexa Tudose Alexa2001 Data 31 mai 2016 17:27:45
Problema Politie Scor 100
Compilator cpp Status done
Runda Arhiva ICPC Marime 1.44 kb
#include <cstdio>
#include <algorithm>
#include <set>

using namespace std;

set<int> Set;
set<int> :: iterator it;

const int N=250005;
const int Size=65536;

int i, n,m, P, X,Y, p, t[N];
struct ss{int x,y,c,p;};
ss a[N<<1];
char Buffer[Size+5];

int boss(int x)
{
    if(x==t[x]) return x;
    return t[x]=boss(t[x]);
}
bool cmp(ss a, ss b)
{
    if(a.c==b.c) return (a.p<b.p);
    return (a.c<b.c);
}

bool cifra(char c) {return (c>='0' && c<='9');}
int gi()
{
     while(!cifra(Buffer[p]))
     {
         ++p;
         if(p==Size) fread(Buffer, Size, 1, stdin), p=0;
     }
     int nr=0;
     while(cifra(Buffer[p]))
     {
         nr=nr*10+Buffer[p]-'0';
         ++p;
         if(p==Size) fread(Buffer, Size, 1, stdin), p=0;
     }

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

    fread(Buffer, Size, 1, stdin);
    n=gi(); m=gi(); X=gi(); P=gi();

    for(i=1; i<=m; ++i)
    {
        a[i].x=gi();
        a[i].y=gi();
        a[i].c=gi();
        a[i].p=gi();
    }
    sort(a+1, a+m+1, cmp);

    for(i=1; i<=n; ++i) t[i]=i;

    for(i=1; i<=m; ++i)
    {
        X=boss(a[i].x);
        Y=boss(a[i].y);
        if(X!=Y)
        {
             Set.insert(a[i].p);
             t[X]=Y;
        }
    }

    for(it=Set.end(); P; --P)
    {
         it--;
         printf("%d\n", *it);
    }

    return 0;
}