Pagini recente » Cod sursa (job #2909991) | Cod sursa (job #3257746) | Cod sursa (job #731331) | Cod sursa (job #2235596) | Cod sursa (job #424445)
Cod sursa(job #424445)
#include<stdio.h>
#include<vector>
using namespace std;
const int lg = 30002;
int n, m, x, y, i, j, tot, teste, ind, prc[lg], val[lg], next[lg], k, cit[lg], mx;
bool fst[lg];
vector<int> v[lg], w[lg];
void df(int nod){
fst[nod] = 1;
for (int i = 0; i < (int)v[nod].size(); i ++)
if (!fst[ v[nod][i] ])
df(v[nod][i]);
prc[++ ind] = nod;
}
int main()
{
freopen("pioni.in", "rt", stdin);
freopen("pioni.out", "wt", stdout);
scanf("%d%d%d", &teste, &n, &m);
for (i = 1; i <= m; i ++){
scanf("%d%d", &x, &y);
v[y].push_back(x);
w[x].push_back(y);
}
for (i = 1; i <= n; i ++)
if (!w[i].size())
df(i);
for (i = n; i; i --){
x = prc[i];
for (j = 0, mx = 0; j < (int)w[x].size(); j ++){
mx = max(mx, val[ w[x][j] ]);
if (!val[ w[x][j] ])
next[x] = w[x][j];
}
if (w[x].size() > 0)
val[x] = 1 - mx;
}
while (teste --){
scanf("%d", &k);
for (i = 1, tot = 0; i <= k; i ++){
scanf("%d", &cit[i]);
if (val[ cit[i] ] == 1)
tot ++;
}
if (!tot)
printf("Fumeanu\n");
else{
printf("Nargy\n%d ", tot);
for (i = 1; i <= k; i ++)
if (val[ cit[i] ] == 1)
printf("%d %d ", cit[i], next[ cit[i] ]);
printf("\n");
}
}
return 0;
}