Cod sursa(job #1960398)

Utilizator akaprosAna Kapros akapros Data 10 aprilie 2017 13:31:02
Problema Pioni Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.47 kb
#include <bits/stdc++.h>
#define maxN 20002
using namespace std;

FILE *fin = freopen("pioni.in", "r", stdin);
FILE *fout = freopen("pioni.out", "w", stdout);

/* ====================== */
int n, m, k, t;
vector < int > V[maxN], T[maxN];
/* ====================== */
bool win[maxN], vis[maxN];
int st[maxN];
/* ====================== */
int ans[maxN];

void dfs(int nod)
{
    ++ vis[nod];
    for (int son : T[nod])
        if (!win[son])
        {
            if (!win[nod])
            {
                win[son] = 1;
                st[son] = nod;
            }
            if (vis[son] == V[son].size())
                dfs(son);
        }
}

int main()
{
    scanf("%d %d %d", &t, &n, &m);
    for (int i = 1; i <= m; ++ i)
    {
        int x, y;
        scanf("%d %d", &x, &y);
        V[x].push_back(y);
        T[y].push_back(x);
    }
    for (int i = 1; i <= n; ++ i)
        if (!V[i].size())
            dfs(i);

    while (t --)
    {
        scanf("%d", &k);
        ans[0] = 0;
        while (k --)
        {
            int nod;
            scanf("%d", &nod);
            if (win[nod])
                ans[++ ans[0]] = nod;
        }
        if (!ans[0])
            printf("Fumeanu\n");
        else
        {
            printf("Nargy\n%d ", ans[0]);
            for (int i = 1; i <= ans[0]; ++ i)
                printf("%d %d ", ans[i], st[ans[i]]);
            printf("\n");
        }
    }

    return 0;
}