Cod sursa(job #175598)

Utilizator DorinOltean Dorin Dorin Data 10 aprilie 2008 09:48:32
Problema Pioni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.54 kb
# include <stdio.h>
# include <vector>

using namespace std;

# define input "pioni.in"
# define output "pioni.out"

# define max 20001
# define maxK 30001

vector < int > v[max],vt[max];
int stare[max];
int e[max],i,j,x,y,k,n,m,T;
int coada[max],st,dr;
int p[maxK];

int main()
{
    freopen(input, "r", stdin);
    freopen(output,"w", stdout);
    
    scanf("%d%d%d",&T,&n,&m);
    
    for(i = 1; i<= m;i++)
    {
        scanf("%d%d",&x,&y);
/*	v[y][++v[y][0]] = x;
	vt[x][++vt[x][0]] = y;*/
    v[y].push_back(x);
    vt[x].push_back(y);
        e[x]++;
    }
    for( i = 1; i<= n;i++)
    {
        if(!e[i])  coada[++dr] = i;
        else stare[i] = 1;
    }
    st = 1;
        
    while(st <= dr)
    {
	i = coada[st++];
        for( k = 0; k < v[i].size();k++)
        {
            j = v[i][k];
            e[j]--;
	    stare[j] &= stare[i];
            if(!e[j])
            {
               coada[++dr] = j;
               stare[j] = !stare[j];
            }    
        }
    }
    
while(T--)
{
	scanf("%d",&k);
	x = 0;
	for( i = 1; i <= k; i++)
	{
	   scanf("%d",&p[i]);
	   x += stare[p[i]];
	}
	if(!x)
	    printf("Fumeanu\n");
	else
	{
	    printf("Nargy\n%d ",x);
	    for(i = 1; i <= k;i++)
	    {
    		if(stare[p[i]])
	    	{
	    	   for( j = 0; j < vt[ p[i] ].size(); j++)
    			   if(!stare[vt[p[i]][j]])
    			   {
    			      printf("%d %d ",p[i],vt[p[i]] [j]  );
     			      break;
	    		   }
	    	}
	    }
	    printf("\n");
	}
}
    
    return 0;
}