AOJ0086 Patrol

問題リンク Patrol

  • 解法

道を一筆書きできるかを判定する問題です。
頂点の次数を調べていき、次数が奇数の頂点が0もしくは2個ならば一筆書き可能です。
0個の場合にオイラーグラフと呼び、2個の場合に準オイラーグラフと呼びます。
前者は閉路を持ち、後者は閉路を持ちません。
この問題では開始点と終点が異なるので、準オイラーグラフでないとだめです。
つまり、開始点と終点の次数のみが共に奇数であるかどうかを調べればおkです。

  • ソース
import java.util.Scanner;

//Patrol
public class AOJ0086 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		while(sc.hasNext()){
			int[] a = new int[101];
			while(true){
				int s = sc.nextInt();
				int t = sc.nextInt();
				if((s|t)==0)break;
				a[s]++;
				a[t]++;
			}
			int o = 0;
			for(int s:a)if(s%2==1)o++;
			System.out.println(o!=2?"NG":a[1]%2==1&&a[2]%2==1?"OK":"NG");
		}
	}
}