Cod sursa(job #141744)

Utilizator sealTudose Vlad seal Data 23 februarie 2008 18:09:28
Problema Pioni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.28 kb
using namespace std;
#include<cstdio>
#include<vector>
#define Nm 20001
#define Km 30000
int A[Km],Win[Nm],t,n;
vector<int> G[Nm];

void read()
{
    int m,x,y;

    freopen("pioni.in","r",stdin);
    scanf("%d%d%d",&t,&n,&m);
    while(m--)
    {
        scanf("%d%d",&x,&y);
        G[x].push_back(y);
    }
}

void DFS(int x)
{
    vector<int>::iterator it;

    for(it=G[x].begin();it!=G[x].end();++it)
        if(!Win[*it])
            DFS(*it);
    Win[x]=-1;
    for(it=G[x].begin();it!=G[x].end();++it)
        if(Win[*it]==-1)
            Win[x]=*it;
}

void solve()
{
    int i;

    for(i=1;i<=n;++i)
        if(!Win[i])
            DFS(i);
}

void write()
{
    int k,i,j;

    freopen("pioni.out","w",stdout);
    while(t--)
    {
        scanf("%d",&k);
        for(j=i=0;i<k;++i)
        {
            scanf("%d",A+i);
            if(Win[A[i]]>0)
                ++j;
        }
        if(j)
        {
            printf("Nargy\n%d",j);
            for(i=0;i<k;++i)
                if(Win[A[i]]>0)
                    printf(" %d %d",A[i],Win[A[i]]);
            printf("\n");
        }
        else
            printf("Fumeanu\n");
    }
}
    
int main()
{
    read();
    solve();
    write();
    return 0;
}