グラフ彩色問題は、よく知られたNP完全問題です。無向グラフ所与G = (V 、Eを、かどうかを尋ねることによって)としてK色頂点が同じ色で、その結果、どの2つの隣接する頂点Vの各色が割り当てられていませんか?
しかし、この問題はあなたを着色の問題を解決することではなく、色の割り当て与えられた、あなたは、この問題を着色液グラフであるかどうかを判断します。
入力フォーマット:
入力は、三つの整数の最初の行に指定されていないV(0 < V ≤ 。5 0 0)、E(≥ 0)及びK(0 < K ≤ V)、それぞれではない、上部グラフに向かってエッジ点の数、および色番号。頂点および1からの色号V. 次いで、両端点の両側の所定数のE線。図に示されている情報が整数正与えた後にN(≤ 2 0)、色割当て方式の数が検討されるべきです。次いで、N行は、各行が順次与えられるV頂点色(i番目の数字は表し、数字の間のスペースで区切られたi番目の頂点色)。タイトルは、与えられた無向グラフが正当であることを確認(すなわち、自重およびエッジループが存在しません)。
出力フォーマット:
溶液が出力される場合は、各色の割り当てのために、グラフ彩色問題はYes
、そうでない出力No
、ラインあたりの各文。
サンプル入力:
6 8 3 2 1 1 3 4 6 2 5 2 4 5 4 5 6 3 6 4 1 2 3 3 1 2 4 5 6 6 4 5 1 2 3 4 5 6 2 3 4 2 3 4
出力例:
はい
はい
ません
#include <iostreamの> する#include < ストリング > の#include <ベクトル> の#include < セット > 使用して 名前空間STDを、 ベクター <ベクトル< INT >> G(501 )。 INTの色[ 501 ] = { 0 }。 ブールチェック(int型V)の { ためには、(INTは私= 1 ; I <= V; I ++ ) のための(INT J = 0 ; J <G [I] .size(); J ++ ) 場合(色[I] == 色[G [I] [J]) 戻り 偽。 返す 真; } int型のmain() { int型V、E、K、N。 CIN >> V >> E >> K; 用(INT iは= 0 ; I <E I ++ ) { int型開始、終了。 CIN >>開始終了を。 G .push_back(終了)[開始]。 Gは.push_back(開始)[END]。 } CIN >> N。 以下のための(int型 I = 0; I <N; I ++ ) { セット < INT > color_kind。 用(INT J = 1 ; J <= V; J ++ ) { CIN >> 色[J]。 color_kind.insert(色[J])。 } であれば(検査(V)&& color_kind.size()== K) COUT << " はい" << ENDL。 他の 裁判所未満 << " ノー" << てendl; }