Cod sursa(job #25812)

Utilizator gcosminGheorghe Cosmin gcosmin Data 4 martie 2007 14:50:16
Problema Balanta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <stdio.h>
#include <bitset>
using namespace std;

#define NMAX 1100

int N, M;

int rez[NMAX];
bitset <NMAX> a[NMAX];
bitset <NMAX> b[NMAX];

char bun[NMAX];

int ver(int x, int g)
{
	int i;

	for (i = 1; i <= M; i++) {
		if (!a[i][x] && !b[i][x]) if (rez[i] != 0) return 0;

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

		if (b[i][x]) {
			if (g == -1) if (rez[i] != 1) return 0;
			if (g == 1) if (rez[i] != 2) return 0;
		}
	}

return 1;
}

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

	scanf("%d %d", &N, &M);

	for (i = 1; i <= M; i++) {
		scanf("%d", &q);

		for (j = 1; j <= q; j++) {
			scanf("%d", &w);
			a[i][w] = 1;
		}
		for (j = 1; j <= q; j++) {
			scanf("%d", &w);
			b[i][w] = 1;
		}
		scanf("%d", &rez[i]);
	}

	for (i = 1; i <= N; i++) {
		if (ver(i, -1)) bun[i] = 1;
		if (ver(i, 1)) bun[i] = 1;
	}

	int nrez = 0;

	for (i = 1; i <= N; i++) nrez += bun[i];

	if (nrez != 1) {
		printf("0\n");
		return 0;
	}

	for (i = 1; i <= N; i++) if (bun[i]) break;
	
	printf("%d\n", i);

fclose(stdin);
fclose(stdout);
return 0;
}