Pagini recente » Cod sursa (job #337166) | Cod sursa (job #2033430) | Cod sursa (job #1386189) | Cod sursa (job #954005) | Cod sursa (job #134300)
Cod sursa(job #134300)
#include <stdio.h>
#include <stdlib.h>
#define fin "pioni.in"
#define fout "pioni.out"
const int Nmax = 20111;
const int Kmax = 30111;
int T,N,M,K,*g[Nmax];
int grade[Nmax];
int stare[Nmax]; //1 win , 2 lose
void df(int x)
{
if ( stare[ x ] )
return;
int i,castig;
castig = 2;
for ( i = 1; i <= grade[ x ]; ++i )
{
df(g[x][i]);
if ( stare[ g[x][i] ] == 2 )
castig = 1;
}
stare[ x ] = castig;
}
void readdata_solve()
{
int i,j,x,y,castig;
int tmp;
int query[Kmax];
freopen(fin,"r",stdin);
freopen(fout,"w",stdout);
scanf("%i%i%i",&T,&N,&M);
//citire grade
for ( i = 1; i <= M; ++i )
{
scanf("%i%i",&x,&y);
grade[y]++;
}
fclose(stdin);
//aloca mem
for ( i = 1; i <= N; ++i )
{
g[i] = (int *) malloc( sizeof(int) * (grade[i] + 1) );
grade[i] = 0;
}
freopen(fin,"r",stdin);
//citire date efectiv
scanf("%i%i%i",&T,&N,&M);
for ( i = 1; i <= M; ++i )
{
scanf("%i%i",&x,&y);
g[x][ ++grade[x] ] = y;
}
//calculare stare castig
for ( i = 1; i <= N; ++i )
df(i);
while ( T -- )
{
scanf("%i",&K);
castig = 2;
tmp = 0;
for ( i = 1; i <= K; ++i )
{
scanf("%i",&query[i]);
if ( stare[ query[i] ] == 1 )
++tmp;
}
if ( tmp > 0 )
{
printf("Nargy\n");
printf("%i",tmp);
for ( i = 1; i <= K; ++i )
if ( stare[ query[i] ] == 1 )
{
x = query[i];
for ( j = 1; j <= grade[x]; ++j )
if ( stare[ g[x][j] ] == 2 )
{
printf(" %i %i",x,g[x][j]);
break;
}
}
printf("\n");
}
else
printf("Fumeanu\n");
}
}
int main()
{
readdata_solve();
return 0;
}