Cod sursa(job #27625)

Utilizator slayer4uVictor Popescu slayer4u Data 6 martie 2007 21:34:20
Problema Balanta Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.53 kb
#include<cstdio>
int taler1[5001][5001],taler2[5001][5001],r[5001],i,j,sol[10001],nsol,m,n,g1,g2;
int main()
{
	freopen ("balanta.in","rt",stdin);
	freopen ("balanta.out","wt",stdout);

	scanf("%d %d",&m,&n);

	for (i=1;i<=n;i++)
	{
		scanf("%d",&taler1[i][0]);
		for (j=1;j<=taler1[i][0];j++)
			scanf("%d",&taler1[i][j]);
		for (j=1;j<=taler1[i][0];j++)
			scanf("%d",&taler2[i][j]);
		scanf("%d",&r[i]);
	}

	// pp k e mai usoara
	nsol=m;
	for (i=1;i<=n&&!g1;i++)
	{
		if (r[i]==0)
		{
			for (j=1;j<=taler1[i][0];j++)
				sol[taler1[i][j]]=1, sol[taler2[i][j]]=1, nsol-=2;
		}
		else
		if (r[i]==1)
		{
			for (j=1;j<=taler1[i][0];j++)
				sol[taler2[i][j]]=1, nsol--;
		}
		else
			for (j=1;j<=taler1[i][0];j++)
				sol[taler1[i][j]]=1, nsol--;
		if (nsol==1)
			for (j=1;j<=m;j++) if (!sol[j]) {g1=j;}
	}

	// pp k e mai grea
	nsol=m;
	for (i=1;i<=m;i++)
		sol[i]=0;
	for (i=1;i<=n&&!g2;i++)
	{
		if (r[i]==0)
		{
			for (j=1;j<=taler1[i][0];j++)
				sol[taler1[i][j]]=1, sol[taler2[i][j]]=1, nsol--;
		}
		else
		if (r[i]==1)
		{
			for (j=1;j<=taler1[i][0];j++)
				sol[taler1[i][j]]=1, nsol--;
		}
		else
			for (j=1;j<=taler1[i][0];j++)
				sol[taler2[i][j]]=1, nsol--;
		if (nsol==1)
			for (j=1;j<=m;j++) if (!sol[j]) {g2=j;}
	}
	if (g1!=g2)
	{
		if (g1!=0 && g2!=0)
			printf("0\n");
		else
		if (g1!=0 && g2==0)
			printf("%d\n",g1);
		else
		if (g2!=0 && g1==0)
			printf("%d\n",g2);
	}
	else
	if (g1==g2 && g1!=0)
		printf("%d\n",g1);		
	else
		printf("0\n");
	return 0;
}