TopCoder SRM 658 Div1 Easy: OddEvenTree (グラフ)

解法

roiti46.hatenablog.com

誤読で撃墜…… 1363 -> 1293 つらい……

コード

import java.util.ArrayList;

public class OddEvenTree {

	public int[] getTree(String[] x) {
		int N = x.length;
		int[] nt = { -1 };
		boolean o = false;
		for (int i = 0; i < N; i++) {
			for (int j = 0; j < N; j++) {
				if (i == j && x[i].charAt(j) != 'E') {
					return nt;
				}
				if (x[i].charAt(j) != x[j].charAt(i)) {
					return nt;
				}
				if (x[0].charAt(i) == x[0].charAt(j)) {
					if (x[i].charAt(j) != 'E') {
						return nt;
					}
				} else {
					if (x[i].charAt(j) != 'O') {
						return nt;
					}
				}
				if (x[i].charAt(j) == 'O') {
					o = true;
				}
			}
		}
		if (!o) {
			return nt;
		}

		boolean[] used = new boolean[N];
		used[0] = true;
		ArrayList<Integer> ans = new ArrayList<>();
		for (int i = 0; i < used.length; i++) {
			if (!used[i] && x[0].charAt(i) == 'O') {
				ans.add(0);
				ans.add(i);
				used[i] = true;
			}
		}
		for (int i = 1; i < used.length; i++) {
			if (!used[i]) {
				continue;
			}
			for (int j = 0; j < used.length; j++) {
				if (!used[j]) {
					ans.add(i);
					ans.add(j);
					used[j] = true;
				}
			}
		}
		int[] ret = new int[ans.size()];
		for (int i = 0; i < ret.length; i++) {
			ret[i] = ans.get(i);
		}
		return ret;

	}
}