Cod sursa(job #906551)

Utilizator visanrVisan Radu visanr Data 6 martie 2013 21:47:49
Problema Pioni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <cstdio>
#include <cstdlib>
#include <vector>
#include <algorithm>
using namespace std;

#define Nmax 20010
#define pb push_back
#define IT vector<int> :: iterator

bool Win[Nmax], Used[Nmax];
int Next[Nmax], N, M, T, A, B, K;
vector<int> G[Nmax], Ans;

int DFS(int Node)
{
    if(Used[Node]) return Win[Node];
    Win[Node] = 0;
    Used[Node] = 1;
    for(IT it = G[Node].begin(); it != G[Node].end(); ++it)
        if(!DFS(*it))
        {
            Win[Node] = 1;
            Next[Node] = *it;
        }
    return Win[Node];
}

int main()
{
    freopen("pioni.in", "r", stdin);
    freopen("pioni.out", "w", stdout);
    int i, j;
    scanf("%i %i %i", &T, &N, &M);
    for(i = 1; i <= M; i++)
    {
        scanf("%i %i", &A, &B);
        G[A].pb(B);
    }
    for(i = 1; i <= N; i++)
        if(!Used[i])
            DFS(i);
    for(i = 1; i <= T; i++)
    {
        scanf("%i", &K);
        Ans.clear();
        for(j = 1; j <= K; j ++)
        {
            scanf("%i", &A);
            if(Win[A])
                Ans.pb(A);
        }
        if(Ans.size())
        {
            printf("Nargy\n");
            printf("%i ", Ans.size());
            for(j = 0; j < Ans.size(); j++)
                printf("%i %i ", Ans[j], Next[Ans[j]]);
            printf("\n");
        }else printf("Fumeanu\n");
    }
    return 0;
}