Cod sursa(job #1460848)

Utilizator nnnmmmcioltan alex nnnmmm Data 14 iulie 2015 10:15:15
Problema Pioni Scor 10
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.72 kb
#include<cstdio>
#include<vector>
using namespace std;
vector <int>v[20001];
bool vizitat[20001],stare[20001];
void dfs(int nod)
{
 vizitat[nod]=true;
 if(v[nod].size()==0)
    stare[nod]=true;
 else
    {
     int N=v[nod].size();
     bool castiga=false;
     for(int i=0;i<N;i++)
         {
          if(!vizitat[v[nod][i]])
             dfs(v[nod][i]);
          if(stare[v[nod][i]])
             castiga=true;
         }
     if(castiga)
        stare[nod]=false;
     else
        stare[nod]=true;
    }
}
int main()
{
 freopen("pioni.in","r",stdin);
 freopen("pioni.out","w",stdout);
 int t,n,m;
 scanf("%d %d %d ",&t,&n,&m);
 for(int i=1;i<=m;i++)
     {
      int a,b;
      scanf("%d %d ",&a,&b);
      v[a].push_back(b);
     }
 for(int i=1;i<=n;i++)
     if(!vizitat[i])
        dfs(i);
 for(int i=1;i<=t;i++)
     {
      int nr_pioni;
      scanf("%d",&nr_pioni);
      bool Castiga=false;
      int mutari=0,pioni[30001];
      for(int j=1;j<=nr_pioni;j++)
          {
           scanf("%d ",&pioni[j]);
           if(!stare[pioni[j]])
              {
               Castiga=true;
               mutari++;
              }
          }
      if(Castiga)
         {
          printf("Nargy\n%d ",mutari);
          for(int j=1;j<=mutari;j++)
              {
               if(!stare[pioni[j]])
                  {
                   printf("%d ",pioni[j]);
                   int sq=0;
                   while(!stare[v[pioni[j]][sq]])
                         sq++;
                   printf("%d ",v[pioni[j]][sq]);
                  }
              }
         }
      else
         printf("Fumeanu");
      printf("\n");
     }
fclose(stdin);
fclose(stdout);
return 0;
}