Cod sursa(job #1709817)

Utilizator UBB_Muresan_Nasca_StefanUBB Muresan Nasca Stefan UBB_Muresan_Nasca_Stefan Data 28 mai 2016 13:59:59
Problema Politie Scor 100
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.72 kb
#include <cstdio>
#include <algorithm>

using namespace std;

int i,aux,n,k,j,p,s,unu,t,m,doi,x,mini,maxi,sol,cont,viz[250010],y,cost,d,cat,pericol;

struct coada
{
    int x,y,cat,pericol;
}c[500010];
coada a[500010];

bool cmp(coada i,coada j)
{
    if (i.cat == j.cat)
    {
        return i.pericol < j.pericol;
    }
    return i.cat < j.cat;
}

bool cmp2(coada i,coada j)
{

    return i.pericol > j.pericol;
}

int parinte(int p)
{
    if(viz[p]==p )return p;
     viz[p]=parinte(viz[p]);
    return viz[p];
}

void unite(int i,int j)
{
    viz[parinte(i)]=parinte(j);
}

int main()
{
    freopen ("politie.in","r",stdin);
    freopen ("politie.out","w",stdout);
    scanf("%d%d%d%d",&n,&m,&d,&p);
    for(i=1;i<=m;i++)
    {
        scanf("%d %d %d %d",&x,&y,&cat,&pericol);
        c[i].x=x;
        c[i].y=y;
        c[i].cat=cat;
        c[i].pericol=pericol;
    }

    sort(c+1,c+m+1,cmp);

    for(i=1;i<=n;i++)
    {
        viz[i]=i;
        //printf("%d %d %d %d\n",c[i].x,c[i].y,c[i].cat,c[i].pericol);
    }

    for(i=1;i<=m;i++)
    {
        //printf("%d %d %d %d\n",c[i].x,c[i].y,c[i].cat,c[i].pericol);
    }

    cont=0;
    k=0;
    for(i=1;i<=m;i++)
    {
        if(parinte(c[i].x) != parinte(c[i].y))
        {
            cont++;
            a[cont]=c[i];
           unite(c[i].x,c[i].y);


        }

    }
    sort(a+1,a+cont+1,cmp2);

    for(i=1;i<=cont;i++)
    {
        if(p>=1)
        {
            if(a[i].pericol != a[i-1].pericol)
            {
                    printf("%d\n",a[i].pericol);
                    p--;
            }
        }
        //printf("%d %d %d %d\n",a[i].x,a[i].y,a[i].cat,a[i].pericol);
    }


}