Pagini recente » Cod sursa (job #1228041) | Cod sursa (job #1728219) | Cod sursa (job #1315019) | Cod sursa (job #3286261) | Cod sursa (job #961278)
Cod sursa(job #961278)
#include <algorithm>
#include <fstream>
#include <iostream>
#include <vector>
using namespace std;
ifstream fin("pioni.in");
ofstream fout("pioni.out");
const int MAX_N = 20100;
int T, N, M;
vector<int> graph[MAX_N];
int move[MAX_N];
bool visited[MAX_N];
bool winning_position[MAX_N];
#define FOR_EACH(it,v) for(typeof((v).begin()) it = (v).begin(); it != (v).end(); ++it)
void dfs(int node);
int main() {
fin >> T >> N >> M;
for (int i = 1, a, b; i <= M; ++i) {
fin >> a >> b;
graph[a].push_back(b);
}
for (int i = 1; i <= N; ++i) {
if (!visited[i]) {
dfs(i);
}
}
for (int i = 1, nr; i <= T; ++i) {
vector<int> first_move;
fin >> nr;
for (int j = 1, node; j <= nr; ++j) {
fin >> node;
if (winning_position[node]) {
first_move.push_back(node);
}
}
if (first_move.empty()) {
fout << "Fumeanu\n";
} else {
fout << "Nargy\n";
fout << first_move.size() << ' ';
FOR_EACH(j, first_move) {
fout << *j << ' ' << move[*j] << ' ';
}
fout << '\n';
}
}
return 0;
}
void dfs(int node) {
visited[node] = true;
FOR_EACH (adjacent, graph[node]) {
if (!visited[*adjacent]) {
dfs(*adjacent);
}
if (!winning_position[*adjacent]) {
winning_position[node] = true;
move[node] = *adjacent;
}
}
}