Cod sursa(job #823319)

Utilizator thewildnathNathan Wildenberg thewildnath Data 24 noiembrie 2012 21:34:40
Problema Party Scor 20
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include<stdio.h>
int v[101],b[101][101],n;
void citire(void)
{
	int i,m,x,y,z;
	freopen("party.in","r",stdin);
	scanf("%d%d",&n,&m);
	for(i=1;i<=m;i++)
	{
		scanf("%d%d%d",&x,&y,&z);
		if(z==0)
		{
			b[x][y]=4;
		}
		else
			b[x][y]=z;
	}
}
void f0(int x,int y)
{
	v[x]=2;
	v[y]=2;
}

void f(int x)
{
	int i;
	v[x]==2;
	for(i=1;i<=n;i++)
	{
		if(b[i][x]==1)    f(i);
		if(b[x][i]==2)    f(i);
	}
}
void afisare(void)
{
	int i,s=0;
	for(i=1;i<=n;i++)
		if(v[i]==2)
			s++;
		printf("%d\n",s);
	for(i=1;i<=n;i++)
		if(v[i]==2)
			printf("%d\n",i);
}
int main()
{
	
	freopen("party.out","w",stdout);
	int i,j;
	citire();
	for(i=1;i<=n;i++)
		v[i]=1;                 // initializare 
	
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			if(b[i][j]==3)
			{
				v[i]=0;
				v[j]=0;
			}
			
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			if(b[i][j]==4)
				f0(i,j);
	
	for(i=1;i<=n;i++)
		if(v[i]==2)    f(i);
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
			if(b[i][j]==3)
			{
				if(v[i]==2)    v[j]=-1;
				if(v[j]==2)    v[i]=-1;
			}
			
	for(i=1;i<=n;i++)
		for(j=1;j<=n;j++)
		{
			if(b[i][j]==1 && v[i]==-1) v[j]=-1;
			if(b[i][j]==2 && v[j]==-1) v[i]=-1;
		}
    
		afisare();
	return 0;
}