Cod sursa(job #2060383)

Utilizator MoodyFaresFares Mohamad MoodyFares Data 8 noiembrie 2017 09:54:58
Problema Pioni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.12 kb
#include <cstdio>
#include <vector>

const int MAX_N = 20000;

std::vector<int> v[MAX_N];
bool viz[MAX_N];
bool win[MAX_N];
int root[MAX_N];

void dfs(int node) {
  viz[node] = true;
  for (auto u : v[node]) {
    if (!viz[u])
      dfs(u);
    if (!win[u]) {
      win[node] = true;
      root[node] = u;
    }
  }
}

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

  int T, N, M;
  scanf("%d%d%d", &T, &N, &M);
  for (int i = 0; i < M; i++) {
    int a, b;
    scanf("%d%d", &a, &b);
    a--;
    b--;
    v[a].push_back(b);
  }
  for (int i = 0; i < N; i++) {
    if (!viz[i]) {
      dfs(i);
    }
  }
  std::vector<int> moves;
  for (int t = 0; t < T; t++) {
    int K;
    scanf("%d", &K);
    moves.clear();
    for (int i = 0; i < K; i++) {
      int x;
      scanf("%d", &x);
      x--;
      if (win[x]) {
        moves.push_back(x);
      }
    }
    if (moves.size() == 0) {
      printf("Fumeanu\n");
    } else {
      printf("Nargy\n%d ", (int)moves.size());
      for (auto it : moves) {
        printf("%d %d ", it + 1, root[it] + 1);
      }
      printf("\n");
    }
  }
  return 0;
}