Cod sursa(job #235348)

Utilizator Pepelea_FlaviuFlaviu Pepelea Pepelea_Flaviu Data 23 decembrie 2008 15:00:56
Problema Pioni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.85 kb
# include <cstdio>
# include <vector>

using namespace std;

# define FIN "pioni.in"
# define FOUT "pioni.out"
# define MAXN 20005
# define MAXK 30005

int T, N, M, K, i, j, rez;
int S[MAXN];
int Go[MAXN];
int Win[MAXN];
int Pion[MAXK];
vector <int> E[MAXN];

    void df(int nod)
    {
        int i, L = E[nod].size() - 1;
        
        S[nod] = 1;
        
        Win[nod] = 0;
        
        for (i = 0; i <= L; ++i)
           if (!S[E[nod][i]])
             {
                df(E[nod][i]);
                if (!Win[E[nod][i]]) 
                  {
                     Win[nod] = 1;
                     Go[nod] = E[nod][i];
                  }
             } else
           if (!Win[E[nod][i]]) 
             {
                Win[nod] = 1;
                Go[nod] = E[nod][i];
             }
    }

    int main()
    {
        freopen(FIN,"r",stdin);
        freopen(FOUT,"w",stdout);
        
        scanf("%d%d%d",&T,&N,&M);
        
        int a, b;
        for (i = 1; i <= M; ++i)
           {
               scanf("%d%d",&a, &b);
               E[a].push_back(b);
           }
        
        for (i = 1; i <= N; ++i)
          if (!S[i]) df(i);
        
        for (; T; --T)
          {
             scanf("%d",&K);
             
             rez = 0;
             for (i = 1; i <= K; ++i)
                {
                    scanf("%d",&Pion[i]);
                    rez += Win[Pion[i]];
                }
             
             if (rez)
               {
                  printf("Nargy\n%d ",rez);
                  for (i = 1; i <= K; ++i)
                    if (Win[Pion[i]])
                      printf("%d %d ",Pion[i], Go[Pion[i]]);
                  printf("\n");
               } else
             printf("Fumeanu\n");
          }
        
        return 0;
    }