Cod sursa(job #357194)

Utilizator Mishu91Andrei Misarca Mishu91 Data 18 octombrie 2009 13:19:03
Problema Balanta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <fstream>
#include <bitset>

using namespace std;

#define MAX_N 1030

ifstream fin ("balanta.in");
ofstream fout ("balanta.out");

int N, M;
bitset <MAX_N> H, L;

int main()
{
	fin >> N >> M;
	L.set(); H.set();

	for(int i = 1; i <= M; ++i)
	{
		int nr, B[4][MAX_N], c;
		fin >> nr;
		for(int j = 1; j <= nr; ++j)
			fin >> B[1][j];
		for(int j = 1; j <= nr; ++j)
			fin >> B[2][j];

		fin >> c;
		if(c)
		{
			bitset <MAX_N> act;

			for(int i = 1; i <= nr; ++i)
				act[B[c][i]] = 1;

			for(int i = 1; i <= N; ++i)
				if(H[i])
					H[i] = act[i]; 
			
			act.reset();
			for(int i = 1; i <= nr; ++i)
				act[B[3-c][i]] = 1;

			for(int i = 1; i <= N; ++i)
				if(L[i])
					L[i] = act[i]; 
		}

		else
		{
			bitset <MAX_N> act;

			for(int i = 1; i <= nr; ++i)
				act[B[1][i]] = 1,
				act[B[2][i]] = 1;

			for(int i = 1; i <= N; ++i)
				if(act[i])
					H[i] = L[i] = 0;
		}

		/*for(int i = 1; i <= N; ++i)
			printf("%d ",(int)H[i]);
		printf("\n");

		for(int i = 1; i <= N; ++i)
			printf("%d ",(int)L[i]);
		printf("\n\n\n");*/
	}

	int cand = 0;
	for(int i = 1; i <= N; ++i)
	{
		if(H[i] == 1)
			if(cand)
			{
				fout << "0\n";
				return 0;
			}
			else
				cand = i;


		if(L[i] == 1)
			if(cand)
			{
				fout << "0\n";
				return 0;
			}
			else
				cand = i;
	}

	fout << cand << "\n";	
}