Cod sursa(job #133963)

Utilizator mariusdrgdragus marius mariusdrg Data 10 februarie 2008 04:44:08
Problema Pioni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 2.27 kb
#include<stdio.h>
#include<vector>
#define mkp make_pair
#define ff first
#define ss second
#define vii vector<int> :: iterator
#define pb push_back
#define vi vector<int>
#define ff first
#define ss second

using namespace std;

const int maxn = 70100;

pair <int,int> sti[maxn];
int st[maxn];
int i,t,m;
int x,y;
vi vect[maxn];
int ver[maxn];
int n,j;
int spg[maxn];
int k;


void dfs(int i)
{
        if (ver[i]) return ;
        ver[i] = 1;
        vii it;
        for(it = vect[i].begin(); it != vect[i].end(); ++it)
        {
                dfs(*it);
        }
        st[++st[0]] = i;
        
}

int main()
{
        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",&x,&y);
                vect[x].pb(y);
        }
        for(i = 1;i <= n; ++i) dfs(i);
        for(j = 1;j <= st[0]; ++j)
        {
                vii it;
                int ver = 0;
                for(it = vect[st[j]].begin(); it != vect[st[j]].end() ;++it)
                {
                        if (!spg[*it]) ver = 1;
                }
                spg[st[j]] = ver;
        }
        for(;t;--t)
        {
                scanf("%d",&k);
                for(i = 1;i <= k; ++i)
                {
                        scanf("%d",&x);
                        vii it;
                        for(it = vect[x].begin();it != vect[x].end(); ++it)
                        {
                                if (!spg[*it])
                                {
                                        sti[++sti[0].ff] = mkp(x,*it);
                                        break;
                                }
                        }
                }
                if (sti[0].ff != 0)
                {
                       printf("Nargy\n");
                       printf("%d",sti[0].ff);
                       for(j = 1;j <= sti[0].ff; ++j)
                       {
                                printf(" %d %d",sti[j].ff,sti[j].ss);
                       }
                       printf("\n");
                }
                else
                {
                        printf("Fumeanu\n");
                }
                sti[0].ff = 0;
        }
        
        return 0;
        
}