Cod sursa(job #1496107)

Utilizator felixiPuscasu Felix felixi Data 4 octombrie 2015 13:24:26
Problema Lazy Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.26 kb
#include<cstdio>
#include<algorithm>
using namespace std;
struct drum
{
    long long x;
    long long y;
    long long c;
    long long d;
    long long p;
} v[200100];
long long n,m,i,j,ra,rb,nr,x[200100],t[200100];
FILE *f,*g;
long long cmp(drum a,drum b)
{
    if(a.c!=b.c)
        return a.c<b.c;
    else
        return a.d>b.d;
}
long long rad(long long r)
{
    while(t[r]>0)
    {
        r=t[r];
    }
    return r;
}
int main()
{
    f=fopen("lazy.in","r");
    g=fopen("lazy.out","w");
    fscanf(f,"%lld%lld",&n,&m);
    for(i=1; i<=m; i++)
    {
        fscanf(f,"%lld%lld%lld%lld",&v[i].x,&v[i].y,&v[i].c,&v[i].d);
        v[i].p=i;
        t[i]=-1;
    }
    sort(v+1,v+m+1,cmp);
    for(i=1; i<=m; i++)
    {
        ra=rad(v[i].x);
        rb=rad(v[i].y);
        if(ra!=rb)
        {
            if(t[ra]<t[rb])
            {
                t[ra]+=t[rb];
                t[rb]=ra;
            }
            else
            {
                t[rb]+=t[ra];
                t[ra]=rb;
            }
            x[++nr]=v[i].p;
            if(nr==n-1)
                break;
        }
    }
    for(i=1; i<=nr; i++)
    {
        fprintf(g,"%lld\n",x[i]);
    }

    fclose(f);
    fclose(g);
    return 0;
}