Cod sursa(job #542470)

Utilizator udrescu_cristiUdrescu Cristian udrescu_cristi Data 26 februarie 2011 14:05:31
Problema Gossips Scor 0
Compilator cpp Status done
Runda Romanian Master in Mathematics and Sciences 2011, Ziua 2 Marime 0.8 kb
#include<stdio.h>

#define nmax 1001

 int a[nmax][nmax],b[nmax][nmax],n,i,m,q,j;
 int v[nmax],x,y,type,t,i1;
 
  void parcurgere(int k,int y)
{
	 t=0;
	for(i=1;i<=n;i++)
	{
		if(v[i]==k)
		{
			for(j=1;j<=n;j++)
				if(a[i][j]&&!v[j])
				{
					 t=1;
					b[j][y]=1;
					v[j]=k+1;
				}
		}
	}
	if(t) parcurgere(k+1,y);
  }
  
 
  int main()
{
	freopen("gossips.in","r",stdin);
	freopen("gossips.out","w",stdout);
	
 scanf("%d%d%d\n",&n,&m,&q);
 for(i=1;i<=m;i++)
	{
		scanf("%d%d\n",&x,&y);
	 a[x][y]=a[y][x]=1;
    }

  for(i1=1;i1<=q;i1++)
{
	scanf("%d%d%d\n",&type,&x,&y);
	if(type==1)
	{
		if(b[x][y]==1) printf("YES\n");
		else printf("NO\n");
	}
	else
	{
	  for(j=1;j<=n;j++)
		  v[j]=0;
		v[x]=1;
		b[x][y]=1;
	  parcurgere(1,y);
  }
  }
return 0;
  }