Pagini recente » Cod sursa (job #1637516) | Cod sursa (job #1370418) | Cod sursa (job #933067) | Cod sursa (job #268558) | Cod sursa (job #134189)
Cod sursa(job #134189)
#include <iostream>
#include <stdio.h>
#include <vector>
using namespace std;
const int maxN = 50001;
int nrP[ maxN ];
int stare[ maxN ];
vector<int> vec[ maxN ];
int T,N,M,K;
int nM, nodM;
void dfs( int nodC ) {
stare[ nodC ] = 1;
for ( int i = 0; i < vec[ nodC ].size(); i++ ) {
if ( stare[ vec[nodC][i] ] )
dfs( vec[nodC][i] );
if ( stare[ vec[nodC][i] ] == 1 )
stare[ nodC ] = 2;
}
}
int main()
{
int a,b;
freopen("pioni.in","r",stdin);
freopen("pioni.out","w",stdout);
scanf("%d %d %d\n", &T, &N, &M );
for ( int i = 1; i <= M; i++ ) {
scanf("%d %d\n", &a, &b );
vec[ a ].push_back( b );
}
for ( int i = 1; i <= N; i++ )
if ( !stare[ i ] ) dfs( i );
while ( T ) {
T--;
memset( nrP, 0, sizeof ( nrP ) );
scanf("%d ", &K );
for ( int i = 1; i <= K; i++ ) {
scanf("%d ", &a );
nrP[ a ]++;
}
vec[0].clear();
for ( int i = 1; i <= N; i++ )
if ( stare[ i ] == 2 && nrP[ i ] )
vec[ 0 ].push_back( i );
if ( vec[0].empty() ) {
printf("Fumeanu\n");
}
else {
printf("Nargy\n");
nM = 0;
for ( int i = 0; i < vec[0].size(); i++ )
nM += nrP[ vec[0][i] ];
printf("%d", nM );
for ( int i = 0; i < vec[0].size(); i++ ) {
for ( int j = 0; j < vec[ vec[0][i] ].size(); j++ ) {
if ( stare[ vec[ vec[0][i] ][ j ] ] == 1 )
nodM = vec[ vec[0][i] ][ j ];
}
while ( nrP[ vec[0][i] ] ) {
nrP[ vec[0][i] ]--;
printf(" %d %d", vec[0][i], nodM );
}
}
printf("\n");
}
}
return 0;
}