Pagini recente » Cod sursa (job #1933004) | Cod sursa (job #882621) | Cod sursa (job #2941052) | Cod sursa (job #279434) | Cod sursa (job #136898)
Cod sursa(job #136898)
#include <cstdio>
#include <cstdlib>
using namespace std;
#define FIN "pioni.in"
#define FOUT "pioni.out"
#define MAX_N 20005
#define MAX_K 30005
int T, N, M, K;
int *A[MAX_N];
int dg[MAX_N];
int S[MAX_N];
int D[MAX_K];
void DFS(int nod)
{
if (S[nod]) return; // ne intoarcem
for (int i = 1; i <= dg[nod]; ++i)
{
DFS(A[nod][i]);
if (S[A[nod][i]] == 2)
{
S[nod] = 1; return ;
}
}
S[nod] = 2;
}
void grade ( void )
{
int i, a, b;
scanf("%d %d %d",&T, &N, &M);
for (i = 1; i <= M; ++i)
{
scanf("%d %d", &a, &b); dg[a]++;
}
for (i = 1; i <= N; ++i)
{
A[i] = (int *) realloc(A[i], sizeof(int) * (dg[i] + 1)); dg[i] = 0;
}
}
void solve()
{
int i, j, a, b;
int BEST;
int Ax;
freopen(FIN, "r", stdin);
scanf("%d %d %d",&T, &N, &M);
for (i = 1; i <= M; ++i)
{
scanf("%d %d",&a, &b); A[a][++dg[a]] = b;
}
for (i = 1; i <= N; ++i) DFS(i);
while (T)
{
scanf("%d", &K);
BEST = 2; Ax = 0;
for (i = 1; i <= K; ++i)
{
scanf("%d", D + i);
if (S[D[i]] == 1) ++Ax;
}
if (Ax)
{
/*
printf ("%d\n", A[a][j]);
for (i = 1; i <= K; ++i)
for (S[Ax] = 1, a = D[i]; i <= K; ++i)
A[D[i]] = S[++a];
*/
printf("Nargy\n"); printf("%d", Ax);
for (i = 1; i <= K; ++i)
if (S[D[i]] == 1)
{
a = D[i];
for (j = 1; j <= dg[a]; ++j)
if (S[A[a][j]] == 2)
{
printf(" %d %d", a, A[a][j]); break;
}
}
// printf ("%d\n", a);
printf("\n");
}
else printf("Fumeanu\n");
--T;
}
}
int main()
{
freopen(FIN, "r", stdin);
freopen(FOUT, "w", stdout);
grade ();
solve ();
return 0;
}