この問題は 01BFS を問います。
島 にいる時点での行動は、次のいずれかです。
①について、この橋は魔法を使う必要があります。魔法を使うことで島 と隣接している島に移動することが可能となります。
②について、魔法を使わずに移動することが可能です。
こうしてみると、この問題は次の問題に帰着することができます。
これは単一始点最短経路探索(ダイクストラ法など)問題に他なりません。しかし今回は のいずれかの重みが加えられているので、これは 01BFS といった探索法を用いることにより解くことができます。
計算量は でこの問題を解くことができました。以下が解答例になります。
※「それ以外の辺」というのはある 以上 以下の整数 であって、すべての辺の情報において が成り立つとき、島 を互いにつなぐ(仮想的な)橋をいいます。この橋を建設するのに魔法を 回要しますから、重み を付加してあげる必要があります。
追記: 想定解の修正をしました。島 から島 に橋を作ることはできますが、島 から島 には橋をかけることはできないことに注意してください。
C++
Python