Cod sursa(job #408823)

Utilizator nomemoryAndrei Ciobanu nomemory Data 3 martie 2010 11:32:48
Problema Stramosi Scor 70
Compilator c Status done
Runda Arhiva de probleme Marime 1.29 kb
#include <stdio.h>
#include <stdlib.h>

#define FIN "stramosi.in"
#define FOUT "stramosi.out"

typedef struct nod_s {
    int val;
    struct nod_s *parent;
} nod;

nod *nod_new(int val);
void nod_free(nod* n);

nod *nod_new(int val){
    nod *n;
    n = malloc(sizeof(*n));
    n->val = val;
    n->parent = NULL;
    return n;
}

void nod_free(nod *n){
    free(n);
}

int main(){
    int j, i, nodes_s, interog_s, pval, pnr, cn, res;
    nod **nodes, *crtn;
    FILE *in, *out;

    in = fopen(FIN, "r");
    out = fopen(FOUT, "w");

    fscanf(in, "%d", &nodes_s);
    fscanf(in, "%d", &interog_s);

    nodes = malloc( (nodes_s + 1) * sizeof(*nodes));
    nodes[0] = NULL;
    for( i = 1; i <= nodes_s; i++){
        fscanf(in, "%d", &pval);
        nodes[i] = nod_new(i);
        nodes[i]->parent = nodes[pval];
    }

    for( i = 0; i < interog_s; i++){
        fscanf(in, "%d", &cn);
        fscanf(in, "%d", &pnr);

        j = pnr;
        crtn = nodes[cn];
        while(j-->0){
            crtn = crtn->parent;
            if( crtn == NULL ){
                res = 0;
                break;
            }
            res = crtn->val;
        }
        fprintf(out, "%d\n", res);
    }

    fclose(in);
    fclose(out);

    return (0);
}