Problem F : Name the Crossing †問題概要 †解法 †まず,各通りを点とする有向グラフを作る.辺については次にしたがう.
ここで 2 つの通り A,B が同水準であることは,次のいずれかを満たすこと
上の条件を満たす 2 つの通り A,B が,さらに次の 2 つの条件を両方とも満たせば A と B は同水準.
あとは単なる経路探索になる.A-B が有効であるかどうかは,A,B の間に経路が存在して,かつその経路における辺の重さの合計値が奇数であることに等しい. 議論・その他 †アルゴリズムを考える時間などを含めると 1 時間程度.この問題はちょっとしんどい.添付したプログラムは上のアルゴリズムをもとに書いたけど,あまり忠実ではないかも.[泉,2004/07/04] 同じタイミングで解いてやがる。 (笑) かかった時間も同様に一時間程度。やっていることも泉と同じ。「入力に存在する」か「同水準」かで初期状態のグラフを作って、そこから Floyd-Warshall ですね。 (三廻部; Jul 4, 2004) ...と思ったけれど、入力 2 に対する答えが違う...。 泉の回答では、問題文中の
ちなみに自分のプログラムからその条件を抜くことで、泉の出力データと一致。 さらに自分の (初期の) 出力データは reject された horizon の出力データと一致。ってことは、自分が間違ってるのかなあ。 (三廻部; Jul 4, 2004) 失礼.たぶん俺のミス.たとえば A-C,B-C となる通り C があったとしても,A-D,D-B となる通り D がないとは言えないのか. ちなみに,泉は Floyd-Warshall なんて高級な方法は利用していない(だからちょっと遅い).Dijkstra のアルゴリズムに近いかな?[泉,2004/07/04] あ,よく考えたらさっきの修正版でもだめだ.再修正版を添付.一応,誤りのあるソースコードも残しておきます.[泉,2004/07/04]
先にあげたプログラムで正解の模様。順位は修正されました。 (三廻部; Jun 5, 2004) ファイルを添付する †horizon_F.cpp 1260件 [詳細] izumi_F2.cpp 1298件 [詳細] izumi_F1.cpp 1299件 [詳細] izumi_F0.cpp 1297件 [詳細] mikurube_F.c 1632件 [詳細] |