Cod sursa(job #26953)

Utilizator love_for_uSpancioc Riana love_for_u Data 5 martie 2007 22:54:44
Problema Balanta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.4 kb
#include <stdio.h>
#include <string.h>
#define NMAX 1024

int H[NMAX], L[NMAX], Hn[NMAX], Ln[NMAX];
int A[NMAX], B[NMAX];
int i, j, N, M, c, nr, ob;

void solve(int A[], int B[], int c)
{
	if  (c == 0)
	{
		for (j = 1; j <= Hn[0]; j++)
			if (!A[Hn[j]] && !B[Hn[j]]) H[++H[0]] = Hn[j];
		
		for (j = 1; j <= Ln[0]; j++)
			if (!A[Ln[j]] && !B[Ln[j]]) L[++L[0]] = Ln[j];
	}
		

	if (c)
	{
		for (j = 1; j <= Hn[0]; j++)
			if (A[Hn[j]]) H[++H[0]] = Hn[j];
			
		for (j = 1; j <= Ln[0]; j++)
			if (B[Ln[j]]) L[++L[0]] = Ln[j];
	}
}

int main()
{
	freopen("balanta.in", "r", stdin);
	freopen("balanta.out", "w", stdout);
	
	scanf("%d %d", &N, &M);
	
	Hn[0] = Ln[0] = N;
	
	for (i = 1; i <= N; i++) Hn[i] = Ln[i] = i;
	
	for (i = 1; i <= M; i++)
	{
		memset(A, 0, sizeof(A));
		memset(B, 0, sizeof(B));
		memset(H, 0, sizeof(H));
		memset(L, 0, sizeof(L));
		
		scanf("%d", &nr);
		
		for (j = 1; j <= nr; j++) scanf("%d", &ob), A[ob] = 1;
		for (j = 1; j <= nr; j++) scanf("%d", &ob), B[ob] = 1;
		
		scanf("%d", &c);
		
		if (c == 0) solve(A, B, c);
		if (c == 1) solve(A, B, c);
		if (c == 2) solve(B, A, c);
		
	
		memcpy(Hn, H, sizeof(H));
		memcpy(Ln, L, sizeof(L));
	}
	
	
	if (Ln[0] + Hn[0] != 1) { printf("0\n"); return 0; }
	
	if (Ln[0] == 1 && Hn[0] == 0) printf("%d\n", Ln[1]); 
	if (Ln[0] == 0 && Hn[0] == 1) printf("%d\n", Hn[1]);
		
	return 0;
}