Cod sursa(job #1222857)

Utilizator ctlin04UAIC.VlasCatalin ctlin04 Data 24 august 2014 16:16:41
Problema Pioni Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.36 kb
#include<fstream>
#include<cstring>
using namespace std;
typedef struct celula {
        int nod;
        celula *next;
        }*lista;
lista graf[20005],v;
int n,t,m,x,y,win[20005],nr[20005],next[20005],k,i;
bool viz[20005];

void dfs(int nod) {
    viz[nod]=1;
    
    for (lista p=graf[nod]; p; p=p->next) {
     if (viz[p->nod]==0) dfs(p->nod);
     if (win[p->nod]==0) { win[nod]=1; next[nod]=p->nod; }
     }
     
}

int main(void) {
    ifstream fin("pioni.in");
    ofstream fout("pioni.out");
    
    fin>>t>>n>>m;
    
    for (i=1; i<=m; ++i) {
        fin>>x>>y;
        v=new celula; v->nod=y; v->next=graf[x]; graf[x]=v;
        }
   
    for (i=1; i<=n; ++i)
     if (viz[i]==0) dfs(i);  
    
    for (; t>0; --t) {
        fin>>k;
        
        for (i=1; i<=k; ++i) {
            fin>>x;
            ++nr[x];
            }
            
        bool ok=0;
        int moves=0;
        for (i=1; i<=n; ++i)
         if (nr[i]>0&&win[i]){ ok=1; moves+=nr[i]; }
         
        if (ok==0) fout<<"Fumeanu\n";
        else {
             fout<<"Nargy\n"<<moves<<" ";
             for (i=1; i<=n; ++i)
              if (win[i]) while ( nr[i]>0 ) { fout<<i<<" "<<next[i]<<" "; --nr[i]; } 
             fout<<"\n";
             }
        
        
        memset(nr,0,sizeof(nr));
        }
    
    return 0;
}