Pagini recente » Cod sursa (job #1434076) | Cod sursa (job #116687) | Cod sursa (job #137584) | Cod sursa (job #697956) | Cod sursa (job #528824)
Cod sursa(job #528824)
#include <cstdio>
#include <cstdlib>
#include <vector>
using namespace std;
#define N 20010
#define K 30010
#define pb push_back
inline int minim(int &x,int &y) {
return ( (x<y) ? x : y );
}
inline int maxim(int &x,int &y) {
return ( (x>y ) ? x : y );
}
int n,m;
vector< int > a[N];
int v[N];
int deg[N];
int nrMv[N];
int unde[N];
int b[K];
inline void citire() {
int x,y;
for(int i=0; i<m; ++i) {
scanf("%d%d",&x,&y);
++deg[y];
a[x].pb(y);
}
}
inline void precalc() {
v[0] = 0;
for(int i=1; i<=n; ++i) {
if(deg[i]==0)
v[++v[0]] = i;
}
int nod,nod1;
for(int i=1; i<=v[0]; ++i) {
nod = v[i];
for(size_t j=0,lim=a[nod].size(); j<lim; ++j) {
nod1 = a[nod][j];
--deg[nod1];
if(deg[nod1]==0) {
v[++v[0]] = nod1;
}
}
}
if(v[0]!=n)
exit(4);
bool win;
for(int i=n; i>0; --i) {
nod = v[i];
if(a[nod].empty())
continue;
win = false;
for(size_t j=0,lim=a[nod].size(); j<lim; ++j) {
nod1 = a[nod][j];
if((nrMv[nod1]&1)==0)
win = true;
}
if(win==false) {
nrMv[nod] = N;
for(size_t j=0,lim=a[nod].size(); j<lim; ++j) {
nod1 = a[nod][j];
if(nrMv[nod1]<nrMv[nod]) {
nrMv[nod] = nrMv[nod1];
unde[nod] = nod1;
}
//nrMv[nod] = minim(nrMv[nod],nrMv[a[nod][j]]);
}
} else {
nrMv[nod] = -1;
for(size_t j=0,lim=a[nod].size(); j<lim; ++j) {
nod1 = a[nod][j];
if(nrMv[nod1]&1)
continue;
if(nrMv[nod1]>nrMv[nod]) {
nrMv[nod] = nrMv[nod1];
unde[nod] = nod1;
}
//nrMv[nod] = maxim(nrMv[nod],nrMv[a[nod][j]]);
}
}
++nrMv[nod];
}
}
inline void rezolva(int T) {
int cat,k,k1;
for(; T>0; --T) {
scanf("%d",&k);
cat = 0;
k1 = k;
for(int i=0; i<k; ++i) {
scanf("%d",&b[i]);
cat = maxim(cat,nrMv[b[i]]);
if(unde[b[i]]==0)
--k1;
}
if(cat&1) {
fputs("Nargy\n",stdout);
printf("%d",k1);
for(int i=0; i<k; ++i)
printf(" %d %d",b[i],unde[b[i]]);
printf("\n");
}
else
fputs("Fumeanu\n",stdout);
}
}
int main() {
freopen("pioni.in","r",stdin);
freopen("pioni.out","w",stdout);
int T;
scanf("%d%d%d",&T,&n,&m);
citire();
precalc();
rezolva(T);
return 0;
}