Cod sursa(job #929464)

Utilizator Marius96Marius Gavrilescu Marius96 Data 27 martie 2013 00:56:28
Problema Pioni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.01 kb
#include<cstdio>

#include<vector>
using std::vector;

static vector<int> v[20005];
static int nr[20005], zr[20005];

static void calc (int n)
{
	bool zero=1;
	for(vector<int>::iterator it=v[n].begin();it!=v[n].end();it++){
		if(nr[*it]==-1)
			calc (*it);
		if(!nr[*it]){
			zr[n]=*it;
			zero=0;
			break;
		}
	}

	nr[n]=zero ? 0 : v[n].size();
}

int main (void)
{
	freopen ("pioni.in","r",stdin);
#ifdef INFOARENA
	freopen ("pioni.out","w",stdout);
#endif

	int t,n,m;
	scanf ("%d%d%d",&t,&n,&m);
	while(m--){
		int x,y;
		scanf ("%d%d",&x,&y);
		v[x].push_back (y);
	}

	for(int i=1;i<=n;i++)
		nr[i]=-1;
	for(int i=1;i<=n;i++)
		if(nr[i]==-1)
			calc (i);

	while(t--){
		int k;
		scanf ("%d",&k);
		vector<int> sol;
		for(int i=0;i<k;i++){
			int x;
			scanf ("%d",&x);
			if(nr[x])
				sol.push_back (x);
		}

		if(sol.size()){
			printf ("Nargy\n%lu ",sol.size());
			for(vector<int>::iterator it=sol.begin();it!=sol.end();it++)
				printf ("%d %d ", *it, zr[*it]);
			puts ("");
		} else
			puts ("Fumeanu");
	}

	return 0;
}