Cod sursa(job #253385)

Utilizator 630r63Ilinca George Mihai 630r63 Data 5 februarie 2009 18:53:55
Problema Pioni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.32 kb
 #include <cstdio>  
 #include <cstring>  
 #include <vector>  
 using namespace std;  
 const int nmax=20001,Inf=999999;  
 vector<int> s[nmax];  
 int t,n,m,k,win[nmax],v[30001],poz[nmax];  
 void calcul(int vf){  
      vector<int>::iterator it;  
      win[vf]=0;  
      for (it=s[vf].begin();it!=s[vf].end();it++)  
       if (win[*it]==-1) calcul(*it);  
      for (it=s[vf].begin();it!=s[vf].end();it++)  
       if (!win[*it]) {win[vf]=1;  
                       poz[vf]=*it;  
                       break;}  
   
      }  
 int main(){  
     int a,b,i;  
     freopen("pioni.in","r",stdin);  
     freopen("pioni.out","w",stdout);  
     scanf("%d %d %d",&t,&n,&m);  
     for (i=1;i<=m;i++) {scanf("%d %d",&a,&b);  
                         s[a].push_back(b);}  
     memset(win,-1,sizeof(win));  
     for (i=1;i<=n;i++)  
      if (win[i]==-1) calcul(i);  
     while (t--){  
           scanf("%d",&k);  
           for (i=1,a=0;i<=k;i++) {scanf("%d",&v[i]);  
                                    a+=win[v[i]];}  
           if (a) {printf("Nargy\n");  
                   printf("%d ",a);   
                   for (i=1;i<=k;i++) if (win[v[i]]) printf("%d %d ",v[i],poz[v[i]]);  
                   printf("\n");}   
              else printf("Fumeanu\n");  
           }  
     return 0;  
}