Pagini recente » Cod sursa (job #2472344) | Cod sursa (job #3182196) | Cod sursa (job #1078428) | Cod sursa (job #111825) | Cod sursa (job #2351738)
#include <bits/stdc++.h>
#define MAXN 20005
#define MAXK 30005
int T, N, M;
std::vector <int> ADC[MAXN];
inline void AddEdge(int X, int Y) {
ADC[X].push_back(Y);
}
int Mem[MAXN];
bool Seen[MAXN], DP[MAXN];
void DFS(int Vertex) {
Seen[Vertex] = 1;
for (auto Edge:ADC[Vertex]) {
if (!Seen[Edge])
DFS(Edge);
if (!DP[Edge])
DP[Vertex] = 1, Mem[Vertex] = Edge;
}
}
std::ifstream In ("pioni.in");
std::ofstream Out("pioni.out");
void Citire() {
In >> T >> N >> M;
for (int i=1, X, Y; i<=M; ++i)
In >> X >> Y, AddEdge(X, Y);
}
void Rezolvare() {
for (int i=1; i<=N; ++i)
if (!Seen[i])
DFS(i);
int K, Arr[MAXK];
int Count;
while (T--) {
In >> K;
Count = 0;
for (int i=1; i<=K; ++i) {
In >> Arr[i];
Count += DP[Arr[i]];
}
if (Count) {
Out << "Nargy\n" << Count << ' ';
for (int i=1; i<=K; ++i)
if (DP[Arr[i]])
Out << Arr[i] << ' ' << Mem[Arr[i]] << ' ';
Out << '\n';
}
else {
Out << "Fumeanu\n";
}
}
}
int main()
{
Citire();
Rezolvare();
return 0;
}