Cod sursa(job #133568)

Utilizator dominoMircea Pasoi domino Data 8 februarie 2008 23:00:22
Problema Pioni Scor Ascuns
Compilator cpp Status done
Runda Marime 1.19 kb
#include <stdio.h>
#include <string.h>
#include <vector>

using namespace std;

#define MAX_N 20005
#define MAX_K 30005
#define FIN "pioni.in"
#define FOUT "pioni.out"

int T, N, M, K, move[MAX_N], pos[MAX_K];
char win[MAX_N];
vector<int> G[MAX_N];

int solve(int n)
{
    char &ret = win[n];
    vector<int>::iterator it;

    if (ret != -1) return ret;
    ret = 0;
    for (it = G[n].begin(); it != G[n].end(); ++it)
        if (!solve(*it)) { ret = 1; move[n] = *it; break; }
    return ret;
}

int main(void)
{
    int i, j, cnt;

    freopen(FIN, "r", stdin);
    freopen(FOUT, "w", stdout);

    memset(win, -1, sizeof(win));
    for (scanf("%d %d %d", &T, &N, &M); M; --M)
    {
        scanf("%d %d", &i, &j);
        G[i].push_back(j);
    }

    for (; T; --T) 
    {
        scanf("%d", &K); 
        for (cnt = i = 0; i < K; ++i)
        {
            scanf("%d", pos+i);
            cnt += solve(pos[i]);
        }
        if (!cnt) { printf("Fumeanu\n"); continue; }
        printf("Nargy\n%d", cnt);
        for (i = 0; i < K; ++i)
            if (solve(pos[i])) printf(" %d %d", pos[i], move[pos[i]]);
        printf("\n");
    }

    return 0;
}