Cod sursa(job #1339899)

Utilizator xtreme77Patrick Sava xtreme77 Data 11 februarie 2015 12:03:34
Problema Pioni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.68 kb
/*
 * Code by Spiromanul
 */

# include "fstream"
# include "cstring"
# include "vector"
# include "queue"
# include "bitset"
# include "algorithm"
# include "deque"

const char IN [ ] = "pioni.in" ;
const char OUT [ ] = "pioni.out" ;
const int MAX = 20222 ;

# define pb push_back
# define mp make_pair
# define FORN( a , b , c ) for ( int a = b ; a <= c ; ++ a )
# define FORNBACK( a , b , c ) for ( int a = b ; a >= c ; -- a )

using namespace std;

ifstream cin ( IN ) ;
ofstream cout ( OUT ) ;

vector < int > gr [ MAX ] ;
vector < int > sol ;

bitset < MAX > viz ;
bitset < MAX > can_win ;

int boss [ MAX ]  ;

inline void dfs ( int nod )
{
    viz [ nod ] = 1 ;
    for ( auto x : gr [ nod ] ) {
        if ( viz [ x ] == 0 )
            dfs ( x ) ;
        if ( can_win [ x ] == 0 ){
            can_win [ nod ] = 1 ;
            boss [ nod ] = x ;
        }
    }
}

int main ( void )
{
    int t , n , m ;
    cin >> t >> n >> m ;
    FORN ( i , 1 , m )
    {
        int x , y ;
        cin >> x >> y ;
        gr [ x ].pb ( y ) ;
    }
    FORN ( i , 1 , n ) if ( viz [ i ] == 0 ) dfs ( i ) ;
    FORN ( q , 1 , t )
    {
        sol.clear ( ) ;
        int k ;
        cin >> k ;
        FORN ( i , 1 , k )
        {
            int x ;
            cin >> x ;
            if ( can_win [ x ] )
                sol.pb ( x ) ;
        }
        if ( sol.size ( ) )
        {
            cout << "Nargy\n" ;
            cout << sol.size ( ) << ' ' ;
            for ( auto w : sol )
                cout << w << ' ' << boss [ w ] << ' ' ;
            cout << '\n' ;
        }
        else cout << "Fumeanu\n" ;
    }
    return 0;
}