Pagini recente » Cod sursa (job #562416) | Cod sursa (job #2955619) | Cod sursa (job #1903242) | Cod sursa (job #1525141) | Cod sursa (job #547013)
Cod sursa(job #547013)
#include <stdio.h>
#include <vector>
using namespace std;
#define MAX_N 20010
#define MAX_K 30010
int T, n, m;
int win[MAX_N], move[MAX_N], Q[MAX_N], degree[MAX_N];
int ask[MAX_K];
vector <int> G[MAX_N];
void solve() {
int left = 0, right = 1;
for (int i = 1; i <= n; i++)
if (degree[i] == 0)
Q[++right] = i;
while (left < right) {
left++;
int vertex = Q[left];
for (vector <int>::iterator it = G[vertex].begin(); it != G[vertex].end(); ++it) {
if (win[vertex] == 0) {
win[*it] = 1;
move[*it] = vertex;
}
degree[*it]--;
if (degree[*it] == 0)
Q[++right] = *it;
}
}
}
void write() {
for (int i = 1; i <= T; i++) {
scanf("%d", &ask[0]);
for (int j = 1; j <= ask[0]; j++)
scanf("%d", &ask[j]);
int winning_strategy = 0;
for (int j = 1; j <= ask[0]; j++)
if (win[ask[j]])
winning_strategy++;
if (winning_strategy == 0)
printf("Fumeanu\n");
else {
printf("Nargy\n");
printf("%d ", winning_strategy);
for (int j = 1; j <= ask[0]; j++)
if (win[ask[j]])
printf("%d %d ", ask[j], move[ask[j]]);
printf("\n");
}
}
}
int main() {
freopen("pioni.in", "r", stdin);
freopen("pioni.out", "w", stdout);
scanf("%d %d %d", &T, &n, &m);
for (int i = 1; i <= m; i++) {
int x, y;
scanf("%d %d", &x, &y);
G[y].push_back(x);
degree[x]++;
}
solve();
write();
return 0;
}