Pagini recente » Cod sursa (job #1502635) | Cod sursa (job #2441299) | Cod sursa (job #2974409) | Cod sursa (job #2931227) | Cod sursa (job #1939415)
import java.io.*;
import java.util.*;
public class Main {
private final static String IN_FILE = "stramosi.in";
private final static String OUT_FILE = "stramosi.out";
class AncestorPQ {
int rank, node;
public AncestorPQ(int rank, int node) {
this.rank=rank;
this.node=node;
}
}
static SortedMap<Integer, Integer>[] a;
static int parent[];
private static int dig(int p, int q) {
//System.out.println("step");
if (p == 0) {
return 0;
}
if (a[p].get(q) !=null) {
return a[p].get(q);
}
else {
SortedMap<Integer, Integer> ranks = a[p];
Integer found = null;
for(Integer rank: ranks.keySet()) {
if (rank < q) {
found = rank;
break;
}
}
int res;
if (found != null) {
//System.out.println("going deeper " + found );
res = dig(ranks.get(found), q-found);
} else {
res = dig(parent[p], q-1);
}
a[p].put(q, res);
return res;
}
}
public static void main(String[] args) {
try {
//READING PART
BufferedReader br = new BufferedReader(new FileReader(IN_FILE));
String line1 = br.readLine();
StringTokenizer st = new StringTokenizer(line1);
int i, j;
int n = Integer.valueOf(st.nextToken());
int m = Integer.valueOf(st.nextToken());
parent = new int[n+1];
st = new StringTokenizer(br.readLine());
i=1;
while(st.hasMoreTokens()) {
parent[i++] = Integer.valueOf(st.nextToken());
}
a = (TreeMap<Integer, Integer>[]) new TreeMap<?,?>[n+1];
for (i = 1; i <= n; i++ ) {
a[i] = new TreeMap<Integer, Integer>(new Comparator<Integer>() {
@Override
public int compare(Integer o1, Integer o2) {
return o2-o1;
}
});
a[i].put(1, parent[i]);
}
BufferedWriter bw = new BufferedWriter(new FileWriter(OUT_FILE));
for (int t = 0; t < m; t++) {
st = new StringTokenizer(br.readLine());
int p = Integer.valueOf(st.nextToken());
int q = Integer.valueOf(st.nextToken());
bw.write(String.valueOf(dig(p,q)));
bw.write('\n');
}
br.close();
// for(i = 1; i< n; i++) {
// SortedMap<Integer, Integer> ranks = a[i];
// System.out.println("Node: "+ i);
// for(Integer rank: ranks.keySet()) {
// System.out.println(rank + "->" + ranks.get(rank));
// }
// }
bw.write(String.valueOf(0));
bw.close();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}