Cod sursa(job #732974)

Utilizator danalex97Dan H Alexandru danalex97 Data 11 aprilie 2012 11:54:13
Problema Balanta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.41 kb
#include <fstream>
using namespace std;

ifstream F("balanta.in");
ofstream G("balanta.out");

typedef bool Multime[1033];
typedef int Sir[1033];
typedef int Nr;

Multime Greu,Usor,Mask;
Sir A,B;
Nr N,M,Rez,K;

int main()
{
	F>>N>>M;
	
	for (Nr i=1;i<=M;++i)
	{
		F>>K;
		
		for (Nr i=1;i<=K;++i) F>>A[i];
		for (Nr i=1;i<=K;++i) F>>B[i];
		
		F>>Rez;
		
		switch (Rez)
		{
			
			case 0:
				for (Nr i=1;i<=K;++i)
					Greu[A[i]]=1,Usor[A[i]]=1,
					Greu[B[i]]=1,Usor[B[i]]=1;
				break;
				
			case 1:
				
				for (Nr i=1;i<=N;++i)	Mask[i]=1;
				for (Nr i=1;i<=K;++i)	Mask[A[i]]=0;
				for (Nr i=1;i<=N;++i)	Greu[i]|=Mask[i];
				
				for (Nr i=1;i<=N;++i)	Mask[i]=1;
				for (Nr i=1;i<=K;++i)	Mask[B[i]]=0;
				for (Nr i=1;i<=N;++i)	Usor[i]|=Mask[i];
				
				break;
				
			case 2:
				
				for (Nr i=1;i<=N;++i)	Mask[i]=1;
				for (Nr i=1;i<=K;++i)	Mask[B[i]]=0;
				for (Nr i=1;i<=N;++i)	Greu[i]|=Mask[i];
				
				for (Nr i=1;i<=N;++i)	Mask[i]=1;
				for (Nr i=1;i<=K;++i)	Mask[A[i]]=0;
				for (Nr i=1;i<=N;++i)	Usor[i]|=Mask[i];
				
				break;
		}
	}
	
	int co=0,place=0;
	for (Nr i=1;i<=N;++i)
		if ( !Greu[i] )
			++co,place=i;
	int co2=0,place2=0;
	for (Nr i=1;i<=N;++i)
		if ( !Usor[i] )
			++co2,place2=i;
	
	if ( ( co==0 && co2==1 ) || ( co==1 && co2==0 ) )
		G<<place2+place<<'\n';
	else
		G<<"0\n";
	
	F.close();
	G.close();
	return 0;
}