ABC120 D - Decayed Bridges
解法
全ての橋が崩れた状態では、どの島からも別の島へ行くことができません。
よって、不便さは、すなわち となります。
ということで、ここから逆に橋を組み立てていき、不便さを後ろから求めていくことにします。
今現在の不便さがで、次にを繋ぐ橋をかけるとします。
既にからへ行くことができる場合、不便さが減ることはないので、からへ行くことができない場合を考えていきます。
自身を含む、から行くことができる島の個数を、同様にから行くことができる島の個数をとします。
このとき、に橋をかけることで、に含まれる任意の島から、に含まれる任意の島へ、新しくいくことができるようになるため、
不便さはだけ減ります。
ということで、が、このときの不便さとなります。
そして、自身を含み、から行くことができる島の個数は、へ増えます。
あとはこれを繰り返し計算していけばよいのですが、この自身を含み、から行くことができる島の個数を計算するのに、自分はUnion-Find木を利用しました。
それぞれのグループの根の部分に、根自身を含み、根からいくことができる島の個数を記録しておくことで、高速に計算することができるようになります。
あとは、順番にシミュレーションをしていくことで、この問題のクエリにこたえることができるようになります。
感想
考察自体は結構スムーズに行けたのですが、実装に時間をかけました。ので、自分の中ではもう少しはやく解くことができた、と思っています。ですが、安定して400点問題をはやときできるようになってきている気がするので、うれしいです!