AOJ-1165: 角角画伯,かく悩みき (Pablo Squarson's Headache)

解法

x座標、y座標それぞれについて最大値と最小値を覚えておくだけ。

import java.util.*;
import java.io.*;

public class Main {
	public static void main(String args[]){
		Scanner in = new Scanner(System.in);
		while(true){
			int n = in.nextInt();
			if(n==0) return ;
			int xs[] = new int[n], ys[] = new int[n];
			xs[0] = ys[0] = 1;
			for(int i=1; i<n; i++){
				int pre = in.nextInt();
				int dir = in.nextInt();
				xs[i] = xs[pre] + (dir==0?-1:dir==2?1:0);
				ys[i] = ys[pre] + (dir==1?-1:dir==3?1:0);
			}
			Arrays.sort(xs);
			Arrays.sort(ys);
			System.out.printf("%d %d\n", xs[n-1] - xs[0] + 1, ys[n-1] - ys[0] + 1);
		}
	}
}