Cod sursa(job #134403)

Utilizator astronomyAirinei Adrian astronomy Data 11 februarie 2008 17:25:09
Problema Pioni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.37 kb
#include <stdio.h>
#include <string.h>
#include <vector>
using namespace std;

#define pb push_back
#define MAXN 20010

int N, M, K, P, A[MAXN], Z[MAXN], viz[MAXN], sol[MAXN];
vector<int> G[MAXN];

void dfs(int x)
{
    if(viz[x]) return ;

    int i; vector<int>::iterator it;

    viz[x] = 1;
    char used[128];

    for(i = 0; i < 128; i++) used[i] = 0;

    for(it = G[x].begin(); it != G[x].end(); ++it)
    {
        dfs(*it), used[ A[*it] ] = 1;
        if(A[*it] == 0) Z[x] = *it;
    }
    
    for(i = 0; i < 128; i++)
     if(used[i] == 0) { A[x] = i; break ; }
}

void read_and_solve(void)
{
    int i, j, k, a, b, nr, T;

    scanf("%d %d %d\n", &T, &N, &M);

    for(i = 0; i < M; i++) scanf("%d %d\n", &a, &b), G[a].pb(b);
    for(i = 1; i <= N; i++) dfs(i);

    while(T--)
    {
        scanf("%d ", &K), P = 0;
        for(i = 1; i <= K; i++)
        {
            scanf("%d ", &a);
            if( A[a] > 0 ) sol[++P] = a;
        }
        if(P == 0) { printf("Fumeanu\n"); continue ; }
        printf("Nargy\n");
        for(printf("%d ", P), i = 1; i <= P; i++)
            printf("%d %d ", sol[i], Z[sol[i]]);
        printf("\n");
    }
}

int main(void)
{
    freopen("pioni.in", "rt", stdin);
    freopen("pioni.out", "wt", stdout);

    read_and_solve();

    return 0;
}