Cod sursa(job #475053)

Utilizator ProtomanAndrei Purice Protoman Data 5 august 2010 20:07:05
Problema Pioni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.31 kb
#include <algorithm>
#include <stdio.h>
#include <vector>

#define MAX 100010
#define pb push_back

using namespace std;

int testCases, n, m;
int sg[MAX], fiu[MAX];
vector <int> vctDrum[MAX];

inline void mex(int nod)
{
	if (sg[nod] != -1)
		return;

	sg[nod] = 0;
	fiu[nod] = nod;
	for (int i = 0; i < vctDrum[nod].size(); i++)
	{
		mex(vctDrum[nod][i]);
		
		if (!sg[vctDrum[nod][i]])
		{
			sg[nod] = 1;
			fiu[nod] = vctDrum[nod][i];
		}
	}
}

int main()
{
	freopen("pioni.in", "r", stdin);
	freopen("pioni.out", "w", stdout);

	scanf("%d %d %d", &testCases, &n, &m);

	for (int i = 0; i < m; i++)
	{
		int n1, n2;
		scanf("%d %d", &n1, &n2);

		vctDrum[n1].pb(n2);
	}

	for (int i = 1; i <= n; i++)
		sg[i] = -1;

	for (int i = 1; i <= n; i++)
		mex(i);

	for (; testCases; testCases--)
	{
		int k, ok = 1;
		scanf("%d", &k);

		vector <int> vctEl;
		for (int i = 1; i <= k; i++)
		{
			int nod;
			scanf("%d", &nod);

			if (sg[nod])
			{
				ok = 0;
				vctEl.pb(nod);
			}
		}
		
		if (ok)
			printf("Fumeanu\n");
		else
		{
			printf("Nargy\n");
			printf("%d", vctEl.size());

			for (int i = 0; i < vctEl.size(); i++)
				printf(" %d %d", vctEl[i], fiu[vctEl[i]]);
			printf("\n");
		}
	}

	fclose(stdin);
	fclose(stdout);

	return 0;
}