Codeforces #34 (div2) D "Road Map"

問題:http://codeforces.com/contest/34/problem/D

ラクティス.
本番では隣接リスト作ってやってたけど,Union-Find木の実装見てたら別にそんな必要ないんじゃないかと思って別解法でやってみた.
入力の時点で親ノード番号が分かってるんだったら旧ルートから新ルートまでを反転させればいいんじゃないかということで実装.

import java.util.*;

public class D_RoadMap {
	public static void main(String[] args) {
		Scanner s = new Scanner(System.in);
		int n = s.nextInt(),r1=s.nextInt(),r2=s.nextInt();
		int[]p=new int[n+1];
		p[r1]=r1;
		for(int i=1;i<=n;++i){
			if(i!=r1){
				p[i]=s.nextInt();
			}
		}
		for(int now=r2,parent=r2;parent!=r1;){
			int tmp = p[now];
			p[now] = parent;
			parent = now;
			now = tmp;
		}
		StringBuffer sb = new StringBuffer();
		for(int i=1;i<=n;++i){
			if(i!=r2){
				sb.append(p[i]);
				sb.append(" ");
			}
		}
		System.out.println(sb.toString().trim());
	}
}