Cod sursa(job #1459247)

Utilizator antanaAntonia Boca antana Data 9 iulie 2015 14:47:03
Problema Pioni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.63 kb
#include <iostream>
#include<cstdio>
#include<vector>
using namespace std;
int n, m;
vector<int>v[20001];
char viz[20001], wl[20001];
int pioni[30001];
void dfs(int nod)
{
    int i,s, gasit=0;
    s=v[nod].size();
    viz[nod]=1;
    if(s==0)
        wl[nod]='l';
    else{
    for(i=0;i<s;i++)
    {
        if(viz[v[nod][i]]==0)
        {

            dfs(v[nod][i]);
        }
    }
    for(i=0;i<s;i++)
        if(wl[v[nod][i]]=='l')
            gasit=1;
    if(gasit==1)
        wl[nod]='w';
    else wl[nod]='l';
    }
}
int main()
{
    freopen("pioni.in", "r", stdin);
    freopen("pioni.out","w", stdout);
    int p, q,i,a, b,j, juc;
    scanf("%d%d%d", &q, &n, &m);
    for(i=1;i<=m;i++)
    {
        scanf("%d%d", &a, &b);
        v[a].push_back(b);
    }
    //dfs
    for(i=1;i<=n;i++)
    {
        if(viz[i]==0)
            dfs(i);
    }
    for(i=1;i<=q;i++)
    {
        juc=0;
        p=0;
        scanf("%d", &a);
        for(j=1;j<=a;j++)
        {
            scanf("%d", &pioni[j]);
            if(wl[pioni[j]]=='w'){
                juc=1;
                p++;
            }
        }
        if(juc==1){
            printf("Nargy\n%d ", p);
            for(j=1;j<=a;j++)
            {
                if(wl[pioni[j]]=='w')
                {
                    printf("%d ", pioni[j]);
                    b=0;
                    while(wl[v[pioni[j]][b]]!='l')
                        b++;
                    printf("%d ", v[pioni[j]][b]);
                }
            }
        }
        else printf("Fumeanu");
        printf("\n");
    }
     return 0;
}