ACM-ICPC 2010 国内予選問題 Problem A 角角画伯,かく悩みき

Problem A 角角画伯,かく悩みき

問題とジャッジデータは↓
国内予選問題 | ACM-ICPC: ACM International Collegiate Programming Contest Asia Regional Contest 2010 in Tokyo

各タイルの位置を覚えておけば良い。

#include <iostream>
#include <vector>
#include <algorithm>

using namespace std;

int main()
{
    while ( true )
    {
        int N;  cin >> N;
        if ( N == 0 )
            break;

        vector<int> x( 1, 0 );
        vector<int> y( 1, 0 );

        for ( int i=1; i<N; i++ )
        {
            int n, d;  cin >> n >> d;

            x.push_back( x[n] );
            y.push_back( y[n] );

            switch ( d )
            {
            case 0:  x[i]--;  break;
            case 1:  y[i]++;  break;
            case 2:  x[i]++;  break;
            case 3:  y[i]--;  break;
            }
        }

        cout << *max_element(x.begin(),x.end()) -
                *min_element(x.begin(),x.end()) + 1 << " "
             << *max_element(y.begin(),y.end()) -
                *min_element(y.begin(),y.end()) + 1 << endl;
    }
}