Cod sursa(job #1458358)

Utilizator assa98Andrei Stanciu assa98 Data 7 iulie 2015 13:25:34
Problema Pioni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.44 kb
#include <fstream>
#include <cstring>
#include <vector>
#include <algorithm>

#define pe pair<int, int>
#define mp make_pair
#define fi first
#define se second

using namespace std;

ifstream fin("pioni.in");
ofstream fout("pioni.out");

const int MAX_N = 20100;

vector<int> A[MAX_N];
vector<pe> ans;
bool lose[MAX_N];
bool viz[MAX_N];

void dfs(int nod) {
    viz[nod] = true;
    lose[nod] = true;
    for(auto it : A[nod]) {
        if(!viz[it]) {
            dfs(it);
        }
        if(lose[it]) {
            lose[nod] = false;
        }
    }
}

void solve() {
    int k;
    fin >> k;
    ans.clear();

    for(int i = 1; i <= k; i++) {
        int a;
        fin >> a;
        if(!lose[a]) {
            for(auto it : A[a]) {
                if(lose[it]) {
                    ans.push_back(mp(a, it));
                    break;
                }
            }
        }
    }
    if(ans.size()) {
        fout << "Nargy\n";
        fout << ans.size() << ' ';
        for(auto it : ans) {
            fout << it.fi << ' ' << it.se << ' ';
        }
        fout << '\n';
    }
    else {
        fout << "Fumeanu\n";
    }
}

int main() {
    int t, n, m;
    fin >> t >> n >> m;
    for(int i = 1; i <= m; i++) {
        int a, b;
        fin >> a >> b;
        A[a].push_back(b);
    }
    
    for(int i = 1; i <= n; i++) {
        if(!viz[i]) {
            dfs(i);
        }
    }

    for(int i = 1; i <= t; i++) {
        solve();
    }
    return 0;
}