Cod sursa(job #328404)

Utilizator AndreiDDiaconeasa Andrei AndreiD Data 1 iulie 2009 22:02:51
Problema Pioni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.22 kb
#include <cstdio>
#include <cstring>
#include <vector>
#include <algorithm>

using namespace std;

#define file_in "pioni.in"
#define file_out "pioni.out"

#define Nmax 50101

#define Inf 0x3f3f3f3f
#define pb push_back

vector<int> v[Nmax];
int n,m,t,k,x,a,b,i,j,nr,sol[Nmax];
int viz[Nmax];

void dfs(int nod)
{
	vector<int> :: iterator it;
	
	for (it=v[nod].begin();it!=v[nod].end();++it)
		 if (!viz[*it]) dfs(*it);
	viz[nod]=-1;
	for (it=v[nod].begin();it!=v[nod].end();++it)
		 if (viz[*it]==-1) viz[nod]=*it;
}
		 

int main()
{
	freopen(file_in,"r",stdin);
	freopen(file_out,"w",stdout);
	
	scanf("%d %d %d", &t,&n,&m);
	
	for (i=1;i<=m;++i)
	{
		scanf("%d %d", &a,&b);
		v[a].pb(b);
	}
	
	memset(viz,0,sizeof(viz));
	for (i=1;i<=n;++i) 
		if (!viz[i]) dfs(i);
	
	while(t--)
	{
		scanf("%d", &k);
		nr=0;
		for (i=1;i<=k;++i)
		{
			scanf("%d", &x);
		    if (viz[x]>=1)
			{	
				nr++;
				sol[nr]=x;
				nr++;
				sol[nr]=viz[x];
			}			
		}
		
		if (nr!=0) 
		{
			printf("Nargy\n");
			printf("%d ", nr/2);
			for (i=1;i<=nr;++i) printf("%d ", sol[i]);
			printf("\n");
		}				
		else
			printf("Fumeanu\n");
	}
	
	fclose(stdin);
	fclose(stdout);
	
	return 0;
}