Cod sursa(job #543844)

Utilizator GheorgheMihaiMihai Gheorghe GheorgheMihai Data 28 februarie 2011 17:39:12
Problema Lazy Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.9 kb
#include <stdio.h>

#include <algorithm>

using namespace std;

struct vect
{
	int x, y, i;
	long long c1, c2;
};

int n, m;
int t[200002];
vect v[200002];

inline int cmp (vect a, vect b)
{
	if (a.c1 != b.c1)
		return a.c1 < b.c1;
	return a.c2 > b.c2;
}

int find (int x)
{
	if (t[x] == x)
		return x;
	t[x] = find (t[x]);
	return t[x];
}

int main ()
{
	freopen ("lazy.in", "r", stdin);
	freopen ("lazy.out", "w", stdout);
	
	scanf ("%d %d", &n, &m);
	
	int i;
	
	for (i = 1; i <= m; i ++)
	{
		scanf ("%d %d %lld %lld", &v[i].x, &v[i].y, &v[i].c1, &v[i].c2);
		v[i].i = i;
	}
	
	sort (v + 1, v + m + 1, cmp);
	
	for (i = 1; i <= n; i ++)
		t[i] = i;
	for (i = 1; i <= m; i ++)
	{
		if (find(v[i].x) != find(v[i].y))
		{
			if (i & 1)
				t[t[v[i].x]] = t[v[i].y];
			else
				t[t[v[i].y]] = t[v[i].x];
			printf ("%d\n", v[i].i);
		}
	}
	
	return 0;
}