Cod sursa(job #423237)

Utilizator swift90Ionut Bogdanescu swift90 Data 23 martie 2010 17:33:38
Problema Pioni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.2 kb
#include<stdio.h>
#include<vector>
using namespace std;
vector <int> nr[20100];
vector <bool> viz(20100,false),stare(20100);
int T,N,M,K;
int pion[30100],mut[20100];
void df(int x){
	viz[x]=true;
	int r=1;
	for(vector<int>::iterator it=nr[x].begin();it!=nr[x].end();++it){
		if(!viz[*it])
			df(*it);
		r&=stare[*it];
	}
	stare[x]=!r;
}
void solve(){
	int i,r=0;
	scanf("%d",&K);
	for(i=0;i<K;++i){
		scanf("%d",&pion[i]);
		if(stare[pion[i]])
			++r;
	}
	if(!r){
		printf("Fumeanu\n");
		return;
	}
	printf("Nargy\n");
	printf("%d",r);
	for(i=0;i<K;++i){
		if(stare[pion[i]])
			printf(" %d %d",pion[i],mut[pion[i]]);
	}
	printf("\n");
}
void mutari(){
	int i,ok;
	for(i=1;i<=N;++i){
		if(stare[i]){
			ok=1;
			for(vector<int>::iterator it=nr[i].begin();it!=nr[i].end() && ok;++it)
				if(!stare[*it]){
					mut[i]=*it;
					ok=0;
				}
		}
	}
}
int main(){
	freopen("pioni.in","r",stdin);
	freopen("pioni.out","w",stdout);
	int i,a,b;
	scanf("%d%d%d",&T,&N,&M);
	for(i=0;i<M;++i){
		scanf("%d%d",&a,&b);
		nr[a].push_back(b);
	}
	for(i=1;i<=N;++i){
		if(!viz[i])
			df(i);
	}
	mutari();
	for(;T;--T)
		solve();
	fclose(stdin);
	fclose(stdout);
	return 0;
}