Cod sursa(job #1424136)

Utilizator paunmatei7FMI Paun Matei paunmatei7 Data 23 aprilie 2015 16:42:45
Problema Pioni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.48 kb
#include <cstdio>
#include <algorithm>
#include <vector>
#include <cstring>

#define NMAX 20007
#define x first
#define y second

using namespace std ;

int T, n, m, b[NMAX];
vector < int > v[NMAX];
vector < pair < int, int > > Ans ;
bool Viz[NMAX], win[NMAX] ;

void dfs(int Nod){
    Viz[Nod] = 1 ;
    for(int i = 0; i < v[Nod].size(); ++i){
        if(Viz[v[Nod][i]] == 0)
            dfs(v[Nod][i]);
        if(win[v[Nod][i]] == 0){
            win[Nod] = 1;
            b[Nod] = v[Nod][i];
        }
    }
}

int main(){
    freopen("pioni.in", "r", stdin);
    freopen("pioni.out", "w", stdout);
    scanf("%d %d %d", &T, &n, &m);
    for(int i = 1; i <= m; ++i){
        int X, Y;
        scanf("%d %d", &X, &Y);
        v[X].push_back(Y);
    }
    for(int i = 1; i <= n; ++i)
        if(Viz[i] == 0)
            dfs(i);
    while(T){
        --T;
        Ans.clear() ;
        int k ;
        scanf("%d", &k);
        bool Y = 1;
        for(int i = 1; i <= k; ++i){
            int X;
            scanf("%d", &X);
            if(win[X] == 1){
                Y = 0;
                Ans.push_back(make_pair(X, b[X]));
            }
        }
        if(Y == 1)
            printf("Fumeanu\n");
        else{
            printf("Nargy\n");
            printf("%d ", Ans.size());
            for(int i = 0; i < Ans.size(); ++i)
                printf("%d %d ", Ans[i].x, Ans[i].y);
            printf("\n");
        }
    }

    return 0 ;
}