Pagini recente » Cod sursa (job #1115191) | Cod sursa (job #2067193) | Cod sursa (job #2645065) | Cod sursa (job #876395) | Cod sursa (job #178680)
Cod sursa(job #178680)
#include <cstdio>
#include <cstring>
#include <vector>
using namespace std;
const int nmax=20001,Inf=999999;
vector<int> s[nmax];
int t,n,m,k,nr[nmax],d[nmax],v[30001],poz[nmax];
void calcul(int vf){
int aux,p;
vector<int>::iterator it;
if (d[vf]==0) nr[vf]=0;
else{
for (it=s[vf].begin();it!=s[vf].end();it++)
if (nr[*it]==-1) calcul(*it);
aux=-1;
for (it=s[vf].begin();it!=s[vf].end();it++)
if (nr[*it]%2==0 && nr[*it]>aux) {aux=nr[*it];
p=*it;}
if (aux==-1){
aux=Inf;
for (it=s[vf].begin();it!=s[vf].end();it++)
if (nr[*it]%2==1 && nr[*it]<aux) {aux=nr[*it];
p=*it;}
}
nr[vf]=1+aux;
poz[vf]=p;
}
}
int main(){
int a,b,max,i,sh;
freopen("pioni.in","r",stdin);
freopen("pioni.out","w",stdout);
scanf("%d %d %d",&t,&n,&m);
for (i=1;i<=m;i++) {scanf("%d %d",&a,&b);
s[a].push_back(b);
d[a]++;}
memset(nr,-1,sizeof(nr));
for (i=1;i<=n;i++)
if (nr[i]==-1) calcul(i);
while (t--){
scanf("%d",&k);
max=-1;
for (i=1;i<=k;i++) {scanf("%d",&v[i]);
if (nr[v[i]]>max) max=nr[v[i]];}
if (max%2==1) {printf("Nargy\n");
for (sh=0,i=1;i<=k;i++) if (d[v[i]]>0) sh++;
printf("%d ",sh);
for (i=1;i<=k;i++) if (d[v[i]]>0) printf("%d %d ",v[i],poz[v[i]]);
printf("\n");}
else printf("Fumeanu\n");
}
return 0;
}