薊畑

Thistleのブログ

yukicoder No.1170 Never Want to Walk

はじめに

問題が全体的に実装軽めで面白かったです。

想定解を思いつきはしたんですが、「区間のマージやりたくない…」と思って捨ててしまいました。 imosとか使えば普通に出来るんですけどね…

考察

区間に辺を張ることが出来ればよいことが分かります。

ここで、熨斗袋さんの区間に辺を張るテクのツイートを思い出すと解けます。

参考

セグ木っぽくしたほうが早いんですが、実装が面倒だったので平方分割で書きました。
想定のほうが実装も計算量も軽いです。

実装の軽い説明をすると、[0,n)は頂点の頂点、[n,n+sqrt(n))を区間の頂点にしてunionfindをしています。 最後に集合に含まれる区間の数を答えから引いてやる必要があります。

実装

yukicoder.me