Cod sursa(job #171797)

Utilizator vlad_popaVlad Popa vlad_popa Data 5 aprilie 2008 09:37:49
Problema Pioni Scor 80
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.38 kb
#include <cstdio>
#include <vector>

using namespace std;

#define MAXN 20001
#define pb push_back

int N, M, T;
int K;
int poz[MAXN];
int stare[MAXN];
int Move[MAXN];
vector <int> lv[MAXN];

void play (int i)
{
    if (stare[i] != -1)
        return;
    stare[i] = 0;
    
    int j, sz;
    for (j = 0, sz = lv[i].size(); j < sz; ++ j)
    {
        play (lv[i][j]);
        if (!stare[lv[i][j]])
        {
            stare[i] = 1;
            Move[i] = lv[i][j];
            break;
        }
    }
}

void read ()
{
    int i, x, y;
    
    scanf (" %d %d %d", &T, &N, &M);
    for (i = 1; i <= M; ++ i)
    {
        scanf (" %d %d", &x, &y);
        lv[x].pb(y);
    }
    
    memset (stare, -1, sizeof (stare));
    for (i = 1; i <= N; ++ i)
        play (i);
}

void solve ()
{
    scanf (" %d", &K);

    int i, Nr = 0;
    for (i = 1; i <= K; ++ i)
    {
        scanf (" %d", poz + i);    
        Nr += stare[poz[i]];
    }
    
    if (!Nr) printf ("Fumeanu\n");
    else
    {
        printf ("Nargy\n%d", Nr);        
        for (i = 1; i <= K; ++ i)
            if (stare[poz[i]]) printf (" %d %d", poz[i], Move[poz[i]]);
        printf ("\n");
    }
}

int
 main ()
{
    freopen ("pioni.in", "rt", stdin);
    freopen ("pioni.out", "wt", stdout);
    
    read ();
    while (T--) solve ();
    
    return 0;
}