Cod sursa(job #659901)

Utilizator Adrian1997Radulescu Adrian Adrian1997 Data 11 ianuarie 2012 10:50:46
Problema Balanta Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.15 kb
#include <fstream>
#include <string.h>
using namespace std;
ifstream f("balanta.in");
ofstream g("balanta.out");
int n,m,st[1024],dr[1024],igr,iu,k;
int gr[1024],u[1024];
long long sgr=0,su;

void intersect(int *a,int *b){
	for(register int i=1;i<=n;i++)
		a[i]=a[i]*b[i];
}

void dif(int *a,int *b){
	for(register int i=1;i<=n;i++){
		if(a[i] && !b[i])
			a[i]=1;
		else
			a[i]=0;
	}
}

int main(void){
	register int i,j,r,x;
	
	f>>n>>m;
	for(i=1;i<=n;i++)
		gr[i]=u[i]=1;
	for(i=1;i<=m;i++){
		f>>k;
		memset(st,0,sizeof(st));
		memset(dr,0,sizeof(dr));
		for(j=1;j<=k;j++){
			f>>x;
			st[x]=1;
		}
		for(j=1;j<=k;j++){
			f>>x;
			dr[x]=1;
		}
		f>>r;
		if(r==0){
			//echilibru
			dif(gr,st);
			dif(gr,dr);
			dif(u,st);
			dif(u,dr);
		}
		else if(r==1){
			intersect(gr,st);
			intersect(u,dr);
		}
		else{
			intersect(gr,dr);
			intersect(u,st);
		}
		
	}
	
	int pu,pgr;
	for(i=1;i<=n;i++){
		if(gr[i]==1){
			igr++;
			pgr=i;
		}
		if(u[i]==1){
			iu++;
			pu=i;
		}
	}
	if(igr==1 && iu==0)
		g<<pgr;
	else if(iu==1 && igr==0)
		g<<pu;
	else
		g<<"0";
	f.close();
	g.close();
	return 0;
}