Cod sursa(job #549144)

Utilizator cristiprgPrigoana Cristian cristiprg Data 8 martie 2011 10:25:34
Problema Lazy Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.05 kb
#include <cstdio>
#include <algorithm>
using namespace std;

struct muchie
{
    int i, j, index;
    long long c1, c2;
    friend bool operator < (const muchie &a, const muchie &b)
    {
        if (a.c1 < b.c1)
        	return true;
        else
        	if (a.c1 == b.c1 && a.c2 > b.c2)
        		return true;
        return false;
    }
};

muchie v[200005];
int n, m, t[200005];

int radacina(int x)
{
    int y = x, tmp;
    while (t[x])
        x = t[x];

    while (t[y])    //smecherie tare
        tmp = t[y], t[y] = x, y = tmp;

    return x;
}

int main()
{
    FILE *f = fopen("lazy.in", "r");
    fscanf(f, "%d%d", &n, &m);
    for (int i = 1; i <= m; ++i)
        fscanf(f, "%d%d%lld%lld", &v[i].i, &v[i].j, &v[i].c1, &v[i].c2), v[i].index = i;
    fclose(f);

    sort(v+1, v+m+1);
	f = fopen("lazy.out", "w");

    for (int i = 1, nr = 0; i <= m && nr <= (n-1); ++i)
    {
        int ri = radacina(v[i].i), rj = radacina(v[i].j);
        if (ri != rj)
            t[ri] = rj, fprintf(f, "%d\n", v[i].index), ++nr;
    }

    
    fclose(f);

    return 0;
}