Cod sursa(job #27952)

Utilizator Adriana_SAdriana Sperlea Adriana_S Data 7 martie 2007 12:44:07
Problema Balanta Scor 60
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.06 kb
#include <stdio.h>
#include <bitset>

using namespace std;

const int N_MAX = 1050;

bitset <N_MAX> a[N_MAX][2];
int rez[N_MAX], N, M;

int is(int fel, int g)
{
	int i, care;
	
	for (i = 1; i <= M; i ++) {

		care = 0;
		if (a[i][1][g - 1] == 1) {
			care = 1;
		} else {
			if (a[i][2][g - 1] == 1) {
				care = 2;
			}
		}
		
		if (fel == -1) {
			if (rez[i] == care) {
				return 0;
			}
		} else {
			if (rez[i] != care) {
				return 0;
			}
		}
	}

	return 1;
}

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

	int k, i, j, x;
	
	scanf("%d %d\n", &N, &M);
	for (i = 1; i <= M; i ++) {
		
		scanf("%d ", &k); 
		for (j = 1; j <= k; j ++) {
			scanf("%d ", &x);
			a[i][1][x - 1] = 1;
		}

		for (j = 1; j <= k; j ++) {
			scanf("%d ", &x);
			a[i][2][x - 1] = 1;
		}

		scanf("%d\n", &rez[i]);
	}

	int nr = 0, poz = 0, g = 0;
	for (i = 1; i <= N; i ++) {
		if (is(-1, i) || is(1, i)) {
			nr ++;
		}

		if (nr == 1 && !g) {
			g = 1;
			poz = i;
		}
	}
		
	if (nr != 1) {
		printf("0\n");
	} else {
		printf("%d\n", poz);
	}
	
	return 0;
}