Cod sursa(job #1928371)

Utilizator alexpetrescuAlexandru Petrescu alexpetrescu Data 16 martie 2017 09:20:16
Problema Pioni Scor 100
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.23 kb
#include <cstdio>
#include <cstring>
#include <vector>

#define MAXN 20000

std::vector <int> g[MAXN+1];
bool viz[MAXN+1], val[MAXN+1];
int ans[MAXN+1], next[MAXN+1];;

void dfs(int x){
    viz[x]=1;
    val[x]=0;
    for(auto y:g[x]){
        if(viz[y]==0) dfs(y);
        if(val[y]==0) val[x]=1, next[x]=y;
    }
}

int main(){
    FILE *fin, *fout;
    fin=fopen("pioni.in", "r");
    fout=fopen("pioni.out", "w");

    int t, n, m;
    fscanf(fin, "%d%d%d", &t, &n, &m);

    for(int i=1; i<=m; i++){
        int x, y;
        fscanf(fin, "%d%d", &x, &y);

        g[x].push_back(y);
    }

    for(int i=1; i<=n; i++)
        dfs(i);

    for(; t; t--){
        int k;
        fscanf(fin, "%d", &k);

        ans[0]=0;
        for(int i=1; i<=k; i++){
            int x;
            fscanf(fin, "%d", &x);

            if(val[x]==1)
                ans[++ans[0]]=x;
        }

        if(ans[0]==0) fprintf(fout, "Fumeanu\n");
        else{
            fprintf(fout, "Nargy\n%d", ans[0]);
            for(int i=1; i<=ans[0]; i++)
                fprintf(fout, " %d %d", ans[i], next[ans[i]]);
            fprintf(fout, "\n");
        }
    }

    fclose(fin);
    fclose(fout);
    return 0;
}