Cod sursa(job #699532)

Utilizator maritimCristian Lambru maritim Data 29 februarie 2012 19:56:07
Problema Balanta Scor 90
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include<stdio.h>
#include<stdlib.h>

FILE *f = fopen("balanta.in","r");
FILE *g = fopen("balanta.out","w");

#define MaxN 1100

int N,M,K,comp,B[MaxN],A1[MaxN],A2[MaxN],viz[MaxN];

void citire(void)
{
	fscanf(f,"%d %d\n",&N,&M);
	for(int i=1;i<=M;i++)
	{
		fscanf(f,"%d ",&K);
		for(int j=1;j<=K;j++)
			fscanf(f,"%d",&A1[j]),viz[A1[j]] = 1;
		for(int j=1;j<=K;j++)
			fscanf(f,"%d",&A2[j]),viz[A2[j]] = 1;
		fscanf(f,"%d",&comp);
		
		if(comp == 0)
			for(int j=1;j<=K;j++)
				B[A1[j]] = B[A2[j]] = 0;
		else if(comp == 1)
			for(int j=1;j<=K;j++)
				B[A1[j]] ++,B[A2[j]] --;
		else
			for(int j=1;j<=K;j++)
				B[A1[j]] --, B[A2[j]]++;
	}
}

int ExistaUnuSigur(void)
{
	int MAX = 0,NR = 0,P;
	
	for(int i=1;i<=N;i++)
		if(abs(B[i]) > MAX)
			MAX = abs(B[i]), NR = 1,P = i;
		else if(abs(B[i]) == MAX)
			++ NR;
		
	if(MAX == 0)
	{
		NR = 0;
		
		for(int i=1;i<=N;i++)
			if(viz[i] == 0)
				++ NR, P = i;
		
		if(NR == 1)
			return P;
		else
			return 0;
	}
		
	if(NR > 1)
		return 0;
	else 
		return P;
}

int main()
{
	citire();
	fprintf(g,"%d",ExistaUnuSigur());
	
	return 0;
}