Cod sursa(job #344942)

Utilizator vladiiIonescu Vlad vladii Data 1 septembrie 2009 12:27:19
Problema Stramosi Scor 0
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.13 kb
#include <iostream>
#include <fstream>
using namespace std;

int n, m, i, j, q, p, s, x=0, a[25000][25000], nivel;
int df(int nivel, int p, int q);

int main() {
    //graful este orientat
    FILE *in=fopen("stramosi.in","r"),*out=fopen("stramosi.out","w");
    fscanf(in,"%d%d", &n, &m);
    /*
    for(i=1; i<=n; i++) {
           for(j=1; j<=n; j++) {
                    a[i][j]=0;
           }
    } */ 
    for(i=1; i<=n; i++) {
             fscanf(in,"%d", &j);
             if(j) {
             a[i][j]=1;
             }
    }
    for(i=1; i<=m; i++) {
             fscanf(in,"%d%d", &q, &p);
             //persoana q, rang p
             nivel=0;
             s=df(nivel, p, q);
             fprintf(out,"%d\n", s);
   }
   fclose(in); fclose(out);
   return 0;
}

int df(int nivel, int p, int q) {
   if(nivel==p) {return q;}
   else {
        //caut urmatorul nod
        for(j=1; j<=n; j++) {
                 if(a[q][j]==1) {
                                q=j; x=1; break;
                 }
        }
        if(x==0) { return 0; }
        x=0;
        nivel++; return df(nivel, p, q);
   }
}