Cod sursa(job #1247727)

Utilizator pop_bogdanBogdan Pop pop_bogdan Data 23 octombrie 2014 15:16:55
Problema Pioni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <fstream>
#include <vector>
using namespace std;

ifstream is("pioni.in");
ofstream os("pioni.out");

#define DIM 20001

int T, N, M, x, y, K;
vector <int> G[DIM];
vector <pair<int,int> > FirstM;
bool Vis[DIM];
int D[DIM];
int Move[DIM];


void Input();
void DFS(int node);
void Query();

int main()
{
    Input();
    for ( int i = 1; i <= N; ++i )
        if ( Vis[i] == 0)
            DFS(i);

    for ( int i = 1; i <= T; ++i )
    {
        FirstM.clear();
        Query();
    }

    is.close();
    os.close();
}

void Input()
{
    is >> T >> N >> M;
    for ( int i = 1; i <= M; ++i )
    {
        is >> x >> y;
        G[x].push_back(y);
    }
}

void DFS(int node)
{
    Vis[node] = 1;
    for ( vector<int>::iterator it = G[node].begin(); it != G[node].end(); ++it )
    {
        if ( !Vis[*it] )
            DFS(*it);

        if ( !D[*it] )
        {
            D[node] = 1;
            Move[node] = *it;
        }
    }
}

void Query()
{
    is >> N;
    for ( int i = 1; i <= N; ++i )
    {
        is >> x;
        if ( D[x] == 1 )
            FirstM.push_back(make_pair(x,Move[x]));
    }
    if ( FirstM.size() )
    {
        os << "Nargy\n";
        os << FirstM.size() << " ";
        for ( int j = 0; j < FirstM.size(); ++j )
            os << FirstM[j].first << " " << FirstM[j].second << " ";
        os << '\n';
    }
    else
        os << "Fumeanu\n";
}