Cod sursa(job #25502)

Utilizator webspiderDumitru Bogdan webspider Data 4 martie 2007 12:46:02
Problema Balanta Scor 10
Compilator cpp Status done
Runda preONI 2007, Runda 3, Clasa a 10-a Marime 1.62 kb
#include <stdio.h>
#include <iostream>
#include <vector>

using namespace std;

const int NORMAL = 1;
const int USOR   = 2;
const int GREU   = 3;

int n,m;
vector<int> stanga;
vector<int> dreapta;
int a;
int ver;
int cautat;
int i,j,k;

int gr[2000];

int main()
{
	freopen("balanta.in","r",stdin);
	freopen("balanta.out","w",stdout);

	scanf("%d %d\n", &n, &m);

	for ( i = 1; i <= m; i++ )
	{
		dreapta.clear();
		stanga.clear();
		scanf("%d ", &k);
		for ( j = 1; j <= 2*k; j++ )
		{
			scanf("%d ", &a);
			if ( j > k )
				dreapta.push_back(a);
			else
				stanga.push_back(a);
		}

		scanf("%d\n", &ver );

		if ( ver == 0 )
		{
			for ( j = 0; j < k; j++ )
			{
				gr[ dreapta[j] ] = NORMAL;
				gr[ stanga[j]  ] = NORMAL;
			}
		}
		if ( ver == 1 )
		{	
			if ( k == 1 )
			{
				if ( gr[ dreapta[0] ] == gr[ stanga[0] ] )
				{
					if ( gr[ dreapta[0] ] == USOR )
						cautat = dreapta[0];
					if ( gr[ dreapta[0] ] == GREU )
						cautat = stanga[0];
				}
			}
			for ( j = 0 ; j < k ; j++ )
			{
				gr[ dreapta[j] ] = USOR;
				gr[ stanga[j]  ] = GREU;
			}
		}
		if ( ver == 2 )
		{
			if ( k == 1 )
			{
				if ( gr[ dreapta[0] ] == gr[ stanga[0] ] )
				{
					if ( gr[ dreapta[0] ] == USOR )
						cautat = stanga[0];
					if ( gr[ dreapta[0] ] == GREU )
						cautat = dreapta[0];
				}
			}
			for ( j = 0 ; j < k; j++ )
			{
				gr[ dreapta[j] ] = GREU;
				gr[ stanga[j]  ] = USOR;
			}
		}
		if ( cautat )
		{
			printf("%d\n", cautat);
			return 0;
		}
	}
	j = 0;
	for ( i = 1 ; i <= n ; i++ )
	{
		if ( gr[i] != NORMAL )
			cautat = i;
		else
			j++;
	}

	if ( j != n-1 ) cautat = 0;
	printf("%d\n", cautat );

	return 0;
}