Pagini recente » Cod sursa (job #824565) | Cod sursa (job #311449) | Cod sursa (job #2784107) | Cod sursa (job #736356) | Cod sursa (job #408823)
Cod sursa(job #408823)
#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);
}