When two sets of eyes meet,

2 secs 1024 MB
programgmg2's icon programgmg2

解説

各マス、既に戦闘した魔物使いの組 (i,j,S)(i,j,S) を頂点として考える。マス (i,j)(i,j) からマス (i,j)(i',j') へ移動するとき、マス (i,j)(i',j') を見ている魔物使いの集合を SS' とすると、(i,j,S)(i,j,SS)(i,j,S) \rightarrow (i',j',S \cup S') の有向辺を張ることができる。このようにしてできた有向グラフ GG について、(1,1,)(1,1,\emptyset) から (H,W,S)(H,W,S) までの経路が存在するような SS の集合 SUS \subset U のうち、 最も要素数の少ないものが答えとなる。

  • 各マスについてそのマスを見ている魔物使いの集合を求める ... O(N×max(H,W))O(N \times max(H,W))
  • 有向辺張り ... O(HW×2N)O(HW \times 2^N)
  • BFS,DFS ... O(V+E)=O(HW×2N)O(V+E) = O(HW \times 2^N) (V=HW×2N,E=4×(HW×2N))(V = HW \times 2^N , E = 4 \times (HW \times 2^N))