ツバサの備忘録

主に備忘録代わりに精進記録を載せていくつもりです。

AOJ 2005 - Water Pipe Construction

問題
提出コード

解法

設置コストを辺の距離とみなすと、結局何かしらの距離の最小値を求めるような問題に帰着できそうな気がします。ここで、制約に注目すると、Nが100以下であり、[tex:O(N3)]が通ることから、ワーシャルフロイド法が使えそう、ということがわかります。
さて、問題の条件を満たすための条件は、sからg_{1}sからg_{2}に向かう経路が存在することで、これらの経路の距離の総和が最小になればよいです。
ここで、上の経路に含まれる以外の辺は絶対に使わないので、以下のような2パターンのみに限定できます。

f:id:emtubasa:20190426145305p:plain

1つめは、図の左側のような、どこかの頂点までは、s->g1,s->g2共に同じ経路をたどり、iで分岐するようなパターンです。
2つめは、図の右側のような、s->g2の経路の途中にそもそもg1が含まれているパターンです(もちろん、g1g2が逆でもよいです)。しかし、これは、g1からg1の距離を0とみなしてしまえば、g1と分岐点iが一致したとみなすことができます。

ということで、あとはありうる分岐点がN通りあるので、それぞれについて、s->i,i->g1,i->g2の距離の総和を求め、その最小値を取ればよいです(もちろん、そもそも経路が存在しなければ無視します)。

感想

解法のポイントに気づいて注目すると、考察がすぐに終わるパターンですね。今回は、分岐点と、制約のN \leqq 100の部分でした。
350点問題でもこのような問題があるので、サクサクといていきたいですね。