Cod sursa(job #155660)

Utilizator anna_bozianuBozianu Ana anna_bozianu Data 12 martie 2008 01:33:15
Problema Pioni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.3 kb
#include<stdio.h>
#define nargy 1;
#define fumeanu 2;
FILE *f,*g;
long i,n,m,t,gr[20001],*v[20001],w[20001],pw,np,p[30001],j;
void citire();
void win(long n1);
void solve();
void afisare();
int main()
{
	citire();
	for(i=1;i<=n;i++) win(i);
	for(;t;t--)
	{ solve();
	  afisare();
	}
	fclose(f);return 0;
}
void citire()
{       long x,y;
	f=fopen("pioni.in","r");g=fopen("pioni.out","w");
	fscanf(f,"%ld%ld%ld",&t,&n,&m);
	for(i=1;i<=m;i++){fscanf(f,"%ld%ld",&x,&y);gr[x]++;}
	fclose(f);
	for(i=1;i<=n;i++){v[i]=new long [gr[i]+2];gr[i]=0;}
	f=fopen("pioni.in","r");
	fscanf(f,"%ld%ld%ld",&t,&n,&m);
	for(i=1;i<=m;i++){fscanf(f,"%ld%ld",&x,&y);v[x][++gr[x]]=y;}
}
void win(long n1)
{       long nv,jj,n2;
	if(w[n1])return;
	nv=gr[n1];
	for(jj=1;jj<=nv;jj++)
	{  n2=v[n1][jj];
	   win(n2);
	   if(w[n2]==2)
	   { w[n1]=1;return;}
	}
	w[n1]=2;
}
void solve()
{       pw=0;
	fscanf(f,"%ld",&np);
	for(i=1;i<=np;i++)
	{ fscanf(f,"%ld",&p[i]);
	  if(w[p[i]]==1)pw++;
	}
}
void afisare()
{
	if(!pw){fprintf(g,"Fumeanu\n");return;}
	fprintf(g,"Nargy\n");
	fprintf(g,"%ld",pw);
	for(i=1;i<=np;i++)
	 if(w[p[i]]==1)
	 { fprintf(g," %ld",p[i]);
	   for(j=1;;j++)
	   {
	     if(w[v[p[i]][j]]==2)
	     { fprintf(g," %ld",v[p[i]][j]);break;}
	   }
	 }
	fprintf(g,"\n");
}