Cod sursa(job #682617)

Utilizator VmanDuta Vlad Vman Data 19 februarie 2012 11:45:28
Problema Lazy Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1 kb
#include <cstdio>
#include <algorithm>
using namespace std;

#define Nmax 200002
#define Mmax 200002

int N, M, i;
int x[Mmax], y[Mmax], C1[Mmax], C2[Mmax], T[Nmax], ind[Mmax], p1, p2;

int cmp(const int &a, const int &b)
{
    if (C1[a] < C1[b] || (C1[a] == C1[b] && C2[a] >= C2[b])) return a;
    return b;
}

int tata(int nod)
{
    if (T[nod] == nod) return nod;
    return T[nod] = tata(T[nod]);
}

int main()
{
    freopen("lazy.in","r",stdin);
    freopen("lazy.out","w",stdout);
    
    scanf("%d %d", &N, &M);
    for (i=0; i<M; ++i)
    {
        scanf("%d %d %lld %lld", &x[i], &y[i], &C1[i], &C2[i]);
        ind[i] = i;
    }
    
    sort(ind, ind+M, cmp);
    
    for (i=1; i<=N; ++i) T[i] = i;
    
    for (i=0; i<M; ++i)
    {
        p1 = tata(x[ind[i]]);
        p2 = tata(y[ind[i]]);
        
        if (p1 != p2)
        {
           if (rand()%2) T[p1] = p2;
              else T[p2] = p1;
           printf("%d\n", ind[i]+1);
        }
    }
}