åºæ¬çã¢ã«ãŽãªãºã ïŒå¹
åªå
æ¢çŽ¢ãªã©ïŒããå¿çšïŒçµè·¯åŸ©å
ãæ¡åŒµãã€ã¯ã¹ãã©ãªã©ïŒãŸã§ãæççµè·¯åé¡ã«é¢ããã¢ã«ãŽãªãºã ãç·ç¹éããŸããã
åºæ¬çãªã°ã©ãçè«ã®çšèªã«ã€ããŠã¯ã次ãåèã«ããŠãã ããã
ã°ã©ãçè«ãçšèªé
queueãªã©ã®ããŒã¿æ§é ã®çšèªã«ã€ããŠã¯ã次ã®ã¹ã©ã€ãã®åŸåãåèã«ããŠãã ããã
C++ STLè¬ç¿äŒ by @e869120
æççµè·¯åé¡ãšã¯
äžè¬çã«ã次ã®ãããªåé¡ãšãããŸãã
$V$ é ç¹ãš $E$ 蟺ãããªãã°ã©ããäžãããããé ç¹ $u$ ãš é ç¹ $v$ ãçµã¶ãã¹ã®ãã¡ãéã¿ã®ç·åãæãå°ãããã®ã¯ã©ãããå§ç¹ãåºå®ããŠä»ã®ãã¹ãŠã®é ç¹ãšã®å¯Ÿã«ã€ããŠæççµè·¯åé¡ãè§£ãå Žåããä»»æã®2é ç¹ã®å¯Ÿã«ã€ããŠè§£ãå Žåãªã©ãå®éã«ã¯å€ãã§ãã å®ç€ŸäŒãšã匷ãå¯çããåé¡ã®ãããå€ãããããããå¹ççãªè§£æ³ãèããããŠããŸããã ä»åã¯ãããã玹ä»ãã€ã€ã现ãããã¯ããã¯ã«ã€ããŠãè¿°ã¹ãŠãããŸãã
â»ä»¥äžãé ç¹æ°ãæããªã $V$, 蟺æ°ãæããªã $E$ ãšè¡šèšããŸãã
ã°ã©ãã®è¡šçŸ
ç«¶æããã°ã©ãã³ã°ã§ã®ã°ã©ãåé¡ã§ã¯ãå€ãã®å Žåé ç¹ãšèŸºã®æ
å ±ãçŽæ¥äžããããïŒä»¥äžããã€ãŒããªã°ã©ããšåŒã³ãŸãïŒããã°ãªãããšããŠäžãããããã®ã©ã¡ããã§ãã
åœç¶ãäžèŠã°ã©ããšã¯é¢ä¿ã®ãªãæŽæ°åé¡ãªã©ãã°ã©ãã«åž°çããå Žåãèããããã®ã§ããã®æã¯èªåã§ã°ã©ããæ§ç¯ããããšã«ãªããŸãããã°ãªããã«ããããšã¯ã»ãŒãªãã§ãããã
ããã§ã¯ãæççµè·¯åé¡ã®è©±é¡ã®åã«ããã®ãããªã°ã©ãã®æ
å ±ãã©ãä¿æãããããŸãšããŸãã
ã°ãªããã®å Žå
ã°ãªããã®åœ¢ãããã°ã©ãã®å Žåã95%以äžã®å Žåã§åæ¹ãå
«æ¹ãç§»åå
ãªã®ã§ãç¹ã«å·¥å€«ãããŠä¿æããå¿
èŠã¯ãããŸããããã¡ãããåãã¹ã«ã°ã©ããšã¯å¥ã®æ
å ±ãããå Žåã¯ãããã¯å¥ã®ãšããã§2次å
é
åãªã©ãçšããŠä¿æããããšã«ãªããŸãã
ãã®ããã«æçŽã«ã°ãªãããä¿æããå Žåãé ç¹ã座æšãçšããŠè¡šçŸãããé ç¹ã2ã€ã®å€ã§åŠçããããšã«ãªãã®ã§ãæ±ãã«ããå ŽåããããŸãããã®ãããªãšãã¯ãé ç¹ã®ãã€çªå·ã1次å
ã«å§çž®ããŠããŸãããšããã®ãã²ãšã€ã®æã§ãã
å
·äœçã«ã¯ãã°ãªããã®çžŠã®é·ãã $H$, 暪ã $W$ ãšããŠãäžãã $i$ è¡ç®ã暪ãã $j$ è¡ç®ã $(i,j)$ ã§è¡šçŸããŠããã®ãã$iW+j$ ã«ã€ã¶ãããšãã§ããŸãã$W$ 鲿³ã®2æ¡ã®æŽæ°å€ãšã¿ãã€ã¡ãŒãžã§ãã
ãã®ãã¯ããã¯ã§ã°ãªããããã£ãšæ±ãããããªãå Žåãããã®ã§ããã²ç¥ã£ãŠãããŸãããã
ãã€ãŒããªã°ã©ãã®å Žå
倧ããåããŠ2ã€ã®æ¹æ³ããããŸãã
飿¥è¡å
$VÃV$ è¡å $A$ ãä¿æããé ç¹ $i$ ãšé ç¹ $j$ ã®éã«éã¿ $w$ ã®èŸºãããå Žåã$A_{ij}=w$ãšããŸãã
蟺ãååšããªãå Žåã$A_{ij}=\infty$ ãšããããäŸå€å€ïŒããããªãå€ïŒãå
¥ããã®ãäžè¬çã§ãã
ãŸããéã¿ãªãã°ã©ãã§ã¯ãboolå€ãæãããŠã蟺ãååšãããšãã®ã¿ $A_{ij}=\rm{true}$ ãšããã®ãããã§ãã
䜿çšé »åºŠã¯å°ãªãã§ãããç¹å®ã®åé¡ã§çµ¶å€§ãªåãçºæ®ããããšããããŸãã
çæãšé·æãæããŸãã
çæ
- ã¡ã¢ãªäœ¿çšéãå€ããïŒ$O(V^2)$ 䜿ããŸãïŒ
- ããé ç¹ããã®ç§»åå ãåæããããšããæäœã®ã³ã¹ãã倧ããïŒæ¯å $O(V)$ ããã£ãŠããŸã)
é·æ
- ããé ç¹ããä»ã®é ç¹ãžã®éã«èŸºãååšããããååšãããšãããã³ã¹ãã¯äœãããšããããŒã¿ã®ååŸã $O(1)$ ã§å¯èœ
- ã®ã¡ã«èª¬æããã¯ãŒã·ã£ã«ã»ããã€ãæ³ãã¯ãããšããäžéšã®ã¢ã«ãŽãªãºã ã§éåžžã«æçš
ãšãã£ãæãã§ãã
飿¥ãªã¹ã
ããé ç¹ããåºãŠãã蟺ããã¹ãŠé ç¹ã«çŽã¥ããŠç®¡çããŸãã
å
·äœçã«ã¯ãé ç¹ã®æ°ã ãå¯å€é·é
åïŒC++ã§ã¯std::vectorïŒãçšæããèŸºã®æ
å ±ããã¹ãŠããã«è©°ã蟌ã¿ãŸããéã¿ãªããªãå
ã®é ç¹çªå·ã ãããéã¿ããããªãäž¡æ¹ãã»ããã«ããŠä¿æããŸããããã§ãå¯å€é·é
åã䜿ããªããšç©ºéèšç®éã $O(VE)$ãšãªããççºããã®ã§èŠæ³šæã§ãã
åæ§ã«çæãšé·æãæããŸãã
çæ
- ããé ç¹ããä»ã®é ç¹ãžã®éã«èŸºãååšããããååšãããšãããã³ã¹ãã¯äœãããšããããŒã¿ã®ååŸã $O(1)$ ã§ã§ããªãïŒãšã¯ãããå ã«ãœãŒãããŠããã°äºåæ¢çŽ¢ãå¯èœãªã®ã§ãååŠçææª $O(V\log E)$ ã§ãæ¯åææª $O(\log E)$ ã§ååŸã§ããŸãïŒ
- ã¯ãŒã·ã£ã«ã»ããã€ãæ³ã§äœ¿ããªã
é·æ
- ã¡ã¢ãªäœ¿çšéãæãããã
- æ±çšæ§ãéåžžã«é«ã
çµè«ããèšããšã飿¥ãªã¹ã衚çŸã䜿ãããããšã®ã»ããå§åçã«å€ãã§ãã
ä»ã«ãç¹æ®ãªæ¡ä»¶äžãªã©ã§å¥ã®è¡šçŸã䜿ãããããšããããŸããããã®ãšãã¯é次説æããããšã«ããŸãã
åäžå§ç¹æççµè·¯åé¡
ããŠãå眮ããé·ããªããŸããããããããæ¬é¡ã®æççµè·¯åé¡ã®èª¬æã«å
¥ã£ãŠãããŸãã
ãŸãã¯åäžå§ç¹æççµè·¯åé¡ããã§ãã
å§ç¹ãåºå®ããããšããããããä»ã®åé ç¹ãžã®æçè·é¢ãæ±ããæ¹æ³ããŸãšããŸãã
BFSïŒå¹ åªå æ¢çŽ¢ïŒ
éã¿ãªãã°ã©ãã®åäžå§ç¹æççµè·¯åé¡ã«å¯ŸããŠãæãå¹ççãªã¢ã«ãŽãªãºã ã§ãã
ã¢ã«ãŽãªãºã æŠèŠã¯æ¬¡ã®ãšããã§ãã
- queueïŒå å ¥ãåŸåºãããŒã¿æ§é ã»ãã¥ãŒïŒãçšæããã
- ãã¥ãŒã«å§ç¹ã®æ å ±ãpushããã
- ãã¥ãŒã空ã«ãªããŸã§ãæ¬¡ã®æäœãç¹°ãè¿ãã
- ãã¥ãŒããé ç¹ã®æ å ±ãã²ãšã€åãåºãã
- ãã®é ç¹ãã蟺ããã©ã£ãŠçŽæ¥è¡ããé ç¹ãåæãããããŸã 蚪ããŠããªãé ç¹ãããã°ããã®é ç¹ã«èšªããå°ãã€ããè·é¢ïŒçŸåšèŠãŠããé ç¹ãŸã§ã®è·é¢ $+1$ ïŒãèšé²ããŠãããæ å ±ããã¥ãŒã«pushããã
ãã®æäœãçµäºãããšãã«ã¯ãå§ç¹ããå°éå¯èœãªå
šé ç¹ã«ã€ããŠãè·é¢ãèšé²æžã¿ã«ãªã£ãŠããŸãã
BFSã®é¢çœããšããã¯ãããé ç¹ããã§ã«èšªãããšããããšãšããã®é ç¹ãžã®æçè·é¢ãæ±ãŸã£ãŠãããšããããšãåå€ã ãšããããšã§ãããªããèããŠã¿ãŸãããã
ãŸããqueueããã¯ãå¿
ãé ç¹ãè·é¢ã®æé ã«åãåºãããŸããããã¯queueã®ç¹æ§ã«ãããã®ã§ãã
ãã®ç¹æ§ã«ãã£ãŠãäžåºŠèšªããé ç¹ãåŸãã蚪ãããšãã¯ããããžã®è·é¢ãçãæŽæ°ãããããšã¯ãªããªããŸãããã£ãŠãå¹ççã«æ¢çŽ¢ã§ããŸãã
èšç®é㯠$O(E)$ ã§ãã
åé¡äŸ(åºæ¬)
åé¡äŸ
ãã«ãã³ã»ãã©ãŒãæ³
éã¿ã€ãã°ã©ãã®åäžå§ç¹æççµè·¯åé¡ã«å¯ŸããŠãããã«è² ã®ã³ã¹ãã®èŸºããããšãã«äœ¿ãããŸãã
ã¢ã«ãŽãªãºã æŠèŠã§ãã
- èŸºã®æ å ±ããã¹ãŠã²ãšã€ã®é åã«ãŸãšããŠãããïŒããã¯äžè¬çãªã°ã©ãã®ç®¡çã®ä»æ¹ãšéããŸãïŒ
- æçè·é¢ãæŽæ°ãããªããªããŸã§ãæ¬¡ã®æäœãç¹°ãè¿ãã
- 蟺ãã²ãšã€ã¥ã€èµ°æ»ããŠããã®èŸºã®å§ç¹ãžã®ã³ã¹ã+蟺ã®ã³ã¹ããçµç¹ãžã®ã³ã¹ãããå°ãããã°ãçµç¹ãžã®ã³ã¹ããæŽæ°ããã
å§ç¹ã®ã³ã¹ã㯠$0$ ã«åæåããŠããããã以å€ã®é ç¹ã«ã€ã㊠$\infty$ ãšããŠããã°ããã§ãã
ããŠãè² ã®éè·¯ãååšããªãå Žåããã®ã¢ã«ãŽãªãºã ã¯åæ¢ããŸãã
ãã®ãšããä»»æã®é ç¹ãžã®æççµè·¯ã¯ãåãé ç¹ã2床éããªãã®ã§ãéã蟺ã¯é«ã
$V-1$ æ¬ã§ãã
ãã£ãŠãäžã®æŠèŠã«æžããŠãã蟺走æ»ãæå€§ $V-1$ åã ãè¡ãã°æçè·é¢ãæŽæ°ãããŸãã
éã«ã$V$ åç®ã®æŽæ°ãçºçããã°ãå§ç¹ããå°éã§ããäœçœ®ã«å¿
ãè² ã®éè·¯ãååšããããšãããããŸãã
以äžãããææªèšç®é㯠$O(VE)$ ã§ãè² éè·¯ã®æ€åºã«äœ¿ããŸãã
è² ã®èŸºãå«ãŸãªãå Žåã¯æ¬¡ã«ç޹ä»ãããã€ã¯ã¹ãã©æ³ã®ã»ããé«éãªã®ã§äœ¿ãããªãå Žåãå€ãã§ãããè² ã®èŸºãå«ãéã¿ã€ãã°ã©ãã«å¯ŸããŠã¯éåžžã«æå¹ãªã¢ã«ãŽãªãºã ã§ãã
䜿ãå Žé¢ã¯ãããŸã§å€ããªãã§ããã以äžã®ãããªåé¡ã§æŽ»çšã§ããŸãã
åé¡äŸ(åºæ¬)
åé¡äŸ
ãã€ã¯ã¹ãã©æ³
è² ã®èŸºãå«ãŸãªãéã¿ä»ãã°ã©ãã®åäžå§ç¹æççµè·¯åé¡ã«å¯ŸããŠäœ¿ãããŸãã
ä¿ã«æ¡åŒµãã€ã¯ã¹ãã©ãšåŒã°ãããã°ã©ãã®æã€æ
å ±ãæ¡åŒµããŠäœ¿ãããå Žåããããæã䜿çšé »åºŠãé«ããšãã£ãŠãéèšã§ã¯ãããŸããã
çºæ³ãšããŠã¯BFSã«è¿ãã§ãã
- priority_queueïŒåªå 床ãã¥ãŒïŒãçšæããå§ç¹ã®æ å ±ãšãããžã®æçè·é¢ïŒå§ç¹ãªã $0$ ïŒãpushããããã®ãšããæçè·é¢é ã§æ å ±ããœãŒããããããã«ããã
- ãã¥ãŒã空ã«ãªããŸã§ãæ¬¡ã®æäœãç¹°ãè¿ãã
- ãã¥ãŒã®å é èŠçŽ ïŒæçè·é¢ã®äžçªå°ãããã®ïŒãåãåºãã
- ãããèšé²ããŠããæçè·é¢ããåãåºããèŠçŽ ã«å ¥ã£ãŠããè·é¢æ å ±ã®ã»ãã倧ãããã°ãããã§æã¡åã£ãŠå é èŠçŽ ãåãåºãæäœã«æ»ãã
- ããããç§»åã§ããé ç¹ãèµ°æ»ããæçè·é¢ãæŽæ°ã§ãããã®ãããã°ãè·é¢ãæŽæ°ããŠãããã®é ç¹ãžã®è·é¢ãé ç¹ã®æ å ±ããã¥ãŒã«pushããã
BFSãšåããããªçºæ³ã§ãpriority_queueãå©çšããããšã«ããããã¥ãŒã®å
é ã«ããèŠçŽ ã®æçè·é¢ã¯ããã®åŸã©ãã ãæŽæ°ãè¡ã£ãŠãå€åããããšã¯ãããŸãããïŒè² ã®èŸºãååšããªãã®ã§ããã以å€ã®é ç¹ããã®æŽæ°ã§ãã以äžè·é¢ãçããªãããšããªãã§ãïŒ
èšç®é㯠$O(E\log V)$ ã§ãã
䜿ããåé¡ã¯ãããããããŸããäŸãã°ã以äžã®ãããªãã®ã§ãã
åé¡äŸ(åºæ¬)
åé¡äŸ
- JOI 2008 äºéž 6 - è¹æ
- SoundHound Inc. Programming Contest 2018 -Masters Tournament--D Saving Snuuk
- æè¡å®€å¥¥ããã°ã©ãã³ã°ã³ã³ãã¹ã #4 Day1 - don't be late
- JOI 2014 äºéž 5 - ã¿ã¯ã·ãŒ
- JOI 2016 äºéž 5 - ãŸã³ãå³¶
å šé ç¹å¯Ÿæççµè·¯åé¡
ä»»æã®2é ç¹ã®å¯Ÿã«å¯ŸããŠæççµè·¯ãæ±ããæ¹æ³ã§ãã
åºæ¬çã«ã¯ãæéèšç®é $O(V^3)$ ã®ã¯ãŒã·ã£ã«ã»ããã€ãæ³ã䜿ãããããšãå€ãã§ããããã€ã¯ã¹ãã©æ³ããã¹ãŠã®é ç¹ã«ã€ããŠè¡ãã° $O(VE\log V)$ ã§è§£ããã¯ãã§ãã
ãŸããæšäžã§ã®å
šé ç¹å¯Ÿæççµè·¯åé¡ã¯ãLCA(Lowest Common Ancestor)ã䜿ã£ãã¢ã«ãŽãªãºã ã䜿ãã°ãåèšç® $O(V)$, ã¯ãšãªããšã§ $O(\log V)$ ã§è§£ããŸãã
ããã§ã¯ãããã®æ¹æ³ã玹ä»ããŸãã
ã¯ãŒã·ã£ã«ã»ããã€ãæ³
å®è£
ãéåžžã«ç°¡åã§ããããŸã䜿çšé »åºŠã¯é«ããããŸããããéèŠãªã¢ã«ãŽãªãºã ã§ãã
åçèšç»æ³ã䜿ã£ãŠåé¡ãè§£ããŸãã
$\rm dp[k][i][j]$ ãã$0$ ãã $k-1$ ãŸã§ã®é ç¹ã䜿ã£ãŠ $\rm i$ ãã $\rm j$ ãŸã§ç§»åãããšãã®æå°ã³ã¹ãããšå®çŸ©ããŸãã
$\rm dp[0][i][j]$ ã¯ãåœç¶ $i$ ãã $j$ ãŸã§ã®è·é¢ãšçããã§ããïŒèŸºãååšããªãå Žå㯠$\infty$ ãšããŸãïŒ
$\rm dp[k+1][i][j]$ ãæ±ããããšãèããŸãã
ãã $i$ ãã $j$ ãŸã§ã®æççµè·¯ãé ç¹ $k$ ãå«ãŸãªãå Žåã$\rm dp[k+1][i][j]=dp[k][i][j]$ ã§ãã
é ç¹ $k$ ãå«ãå Žåã¯ã$i$ ãã $k$ ãŸã§ã®æççµè·¯ãšã$k$ ãã $j$ ãŸã§ã®æççµè·¯ã«åè§£ã§ããã®ã§ã$\rm dp[k+1][i][j]=dp[k][i][k]+dp[k][k][j]$ ã§ãã
$\rm k,i,j$ ã®æé ã«ã«ãŒããåãã°ã$\rm dp[V][i][j]$ 㯠$i$ ãã $j$ ãŸã§ã®æççµè·¯ãšãªã£ãŠããŸãã
ãã®DPã§ã¯ãæŽæ°ããã¶ãåã«ã¯äœãåé¡ãªãã®ã§ãé
åã®1次å
ç®ãç¯çŽããããšãã§ããŸãã
éåžžã«åçŽãªã®ã§ã³ãŒãäŸãèŒããŠãããŸãã
for(int k=0;k<V;k++){
for(int i=0;i<V;i++){
for(int j=0;j<V;j++)dp[i][j]=min(dp[i][j],dp[i][k]+dp[k][j]);
}
}
åæå€ã®èšå®ãšãã®DPã ãã§æççµè·¯ãæ±ãŸããŸãã
ãŸããããŸãé¢ä¿ãªãã§ãããéäžã§2é ç¹éã®èŸºã®é·ããå€ããã¯ãšãªããã£ãŠãã$O(V^2)$ ã§å¯Ÿå¿ã§ããŸãã
ãªããã¯ãŒã·ã£ã«ããã€ãæ³ã¯ãè² ã®ã³ã¹ãã®èŸºãããå Žåã§ãè§£ãããšãã§ããŸããäŸãã°ã$\rm dp[V][i][i]$ (äžã®ãœãŒã¹ã³ãŒãã ãš dp[i][i]) ãè² ãšãªããã㪠$i$ ãååšããã°ããã®ã°ã©ãã¯è² ã®éè·¯ãå«ã¿ãŸãã
åé¡äŸ (åºæ¬)
- å šé ç¹éæççµè·¯ãâ»è² ã®éè·¯ãå«ã¿ãŸã
åé¡äŸ
- ABC012-D ãã¹ãšé¿ããããªãéåœ
- ABC079-D Wall
- ARC035-C ã¢ããã³ãŒããŒçåœã®äº€éäºæ
æšäžã§ã®å šé ç¹å¯Ÿæççµè·¯åé¡
æšäžã§ã¯ãLCAïŒLowest Common Ancestor, æå°å
±éç¥å
ïŒãæ±ããã¢ã«ãŽãªãºã ã䜿ã£ãŠå
šé ç¹å¯Ÿã®æççµè·¯åé¡ãè§£ãããšãã§ããŸããLCAã®è§£èª¬ããå§ããŸãã
æ ¹ä»ãæšã«ãããŠããã2é ç¹ã®å
±éç¥å
ïŒ2é ç¹ããæ ¹ãŸã§ã®ãã¹äž¡æ¹ã®äžã«ããé ç¹ïŒã®ãã¡ããã¡ã°ãæ ¹ããé ããã®ãLCA,æå°å
±éç¥å
ãšåŒã³ãŸãã
æšäžã®2é ç¹ $u,v$ ã®è·é¢ã¯ã
ïŒæ ¹ãã $u$ ãŸã§ã®è·é¢ïŒ$+$ïŒæ ¹ãã $v$ ãŸã§ã®è·é¢ïŒ$- 2$ïŒæ ¹ãã $u,v$ ã®LCAãŸã§ã®è·é¢ïŒ
ã§ãã
æ ¹ããåé ç¹ãŸã§ã®è·é¢ã¯ãDFSãBFSãªã©ãè¡ã£ãŠã$O(V)$ ã§ç°¡åã«æ±ããããŸãã
æšã«ãããŠãæå°å
±éç¥å
ãæ±ããã®ã¯ååŠç $O(V)$ ãŸã㯠$O(V\log V)$, åã¯ãšãª $O(\log V)$ ãŸã㯠$O(1)$ ã§å¯èœãªã®ã§ãååŠçã ãã§é«éã«ä»»æã®2é ç¹éã®æçè·é¢ãæ±ããããã®ã§ãã
以äžã§ã¯ãLCAãæ±ããããã®2ã€ã®äž»ãªæ¹æ³ã玹ä»ããŸãã
远èš:@rsk0315_h4x ããã«ãããšã100000åã¯ãšãªã®åé¡ã§ã¯ãSegment Treeã䜿ãã®ã1çªéãã£ããããã§ãã
ãªã€ã©ãŒãã¢ãŒãšRMQãäœ¿ãæ¹æ³
æšã®æ ¹ããDFSã®æ¢çŽ¢ã§èšªããé ç¹ãããã®é ã«èšé²ããããšããªã€ã©ãŒãã¢ãŒãšãããŸãã

ããšãã°ãäžã®ãããªã°ã©ãã§Aãããªã€ã©ãŒãã¢ãŒãè¡ã£ãå Žåãèšé²ã¯
A,B,A,C,D,C,E,C,A
ãšããé ã«ãªããŸãã
ãªã€ã©ãŒãã¢ãŒã§çæãããé ç¹é
åã®ç¹åŸŽãšããŠãä»»æã®é£ç¶ããéšååã«å«ãŸããé ç¹éåãéšåæšã«ãªãããšããããšããããŸãã
$u$ ãš $v$ ãå«ã¿ãLCAã®ç¥å
ãå«ãŸãªãéšåæšã¯ãæåã« $u$ ãç»å Žããéšåãšãæåã« $v$ ãç»å Žããéšåã®éã®åã®éåã§è¡šçŸã§ããŸãã
ãã®äžã§æãæ ¹ããã®è·é¢ãå°ãããã®ãæ±ããã°ããããLCAã§ãã
ããã¯RMQ(Range Minimum Queries)ã®äžçš®ãªã®ã§ãSegment TreeãSparse Tableã䜿ã£ãŠå¹ççã«è§£ããŸãã
ãªã€ã©ãŒãã¢ãŒã«ãããŠçæãããåã®é·ãã¯èŸºã®æ°ã«æ¯äŸããã®ã§ãé«ã
$V$ ã®å®æ°åã§ãã
ãªã€ã©ãŒãã¢ãŒã«ãããŠæ ¹ããã®è·é¢ãèšé²ããŠãããæãè·é¢ãå°ãããã®ãæ±ããã°ãSegment Treeã§ã¯ååŠç $O(V)$ïŒãªã€ã©ãŒãã¢ãŒïŒãã¯ãšãªããš $O(\log V)$ãSparse Tableã§ã¯ ååŠç $O(V\log V)$, ã¯ãšãªããš $O(1)$ ã§LCAãæ±ããããŸãã
LCAãŸã§ã®è·é¢ã ãã§ãªããã©ã®é ç¹ããååŸãããå Žåã¯ãRMQã®ããŒãã§æ ¹ããã®è·é¢ãšãšãã«é ç¹çªå·ãèšé²ããªããšãããªãã®ã§ã泚æããŠãã ããã
ãããªã³ã°ãäœ¿ãæ¹æ³
ååŠçã§æ¬¡ã®ãããªããŒãã«ãæ§ç¯ããŸãã
$\rm doubling[i][j]=j$ ãã $2^i$ åé ç¹ãããã®ãŒã£ãç¥å
ããã§ã$\rm doubling[i+1][j]=doubling[i][doubling[i][j]]$ ãæãç«ã€ã®ã§åçèšç»æ³ã®èŠé ã§æ±ããããšãã§ãããŸãã$i$ ã¯é«ã
$\log V$ çš®é¡ããããããªãã®ã§ãååŠçã®èšç®é㯠$O(V\log V)$ ã§ãã
é ç¹ $u$ ãš $v$ ã®LCAãæ±ããã¯ãšãªã«ã¯ã次ã®ããã«ããŒãã«ãçšããŠå¯Ÿå¿ã§ããŸãã
- $u$ ãš $v$ ã®ãã¡ãé ç¹ããã®è·é¢ãé ãæ¹ããããäžæ¹ã«åããŸã§ããã®ãŒããããããã¯ãããŒãã«ã®ãã¡é«ã $\log V$ åã®èŠçŽ ãåç §ããããšã§å®çŸã§ããã
- $i$ ã®éé ã«ããŒãã«ãèŠãŠãããäºåæ¢çŽ¢ã®ãããªèŠé ã§ãLCAãŸã§æ¢çŽ¢ç¯å²ãçããŠãããããŒãã«ã $i$ ã®éé ã«åç §ããã®ã§ãèšç®é㯠$O(\log V)$ ãšãªãã
ããããŠãLCAãé«éã«æ±ããããŸãããåã«æãããªã€ã©ãŒãã¢ãŒã®æ¹æ³ããååŠçã®èšç®æéãæªãã§ããããã¡ãã®ã»ããå®è£ ã軜ãããšãªã©ãèãããšãç¡çšãšããããšã¯ãããŸããã
åé¡äŸ (åºæ¬)
åé¡äŸ
- ABC014-D éè·¯
- yukicoder No.898 tri-βutree
- JOI 2012 æ¬éž 5 - JOI åœã®ãç¥ãäºæ ãâ»ããé£ãã
- Kodamanãšæå¿«ãªä»²éãã¡-Y åŸ ã¡åãã â»ããªãé£ãã
çµè·¯åŸ©å
æççµè·¯ãæ±ããããã®äž»ãªã¢ã«ãŽãªãºã ã¯ãããŸã§ã§ãããç²ãããŸã§ããã
ããããã¯ãå
·äœçãªæççµè·¯ã®ãã¹ãæ±ããããšãã£ã話é¡ã«ç§»è¡ããŸãã
ãããŸã§ãããããªã¢ã«ãŽãªãºã ã玹ä»ããŠããŸãããããã¹ãŠãããæå³åçèšç»æ³ã®ãããªã¢ãããŒããããŠããŸããããã®ãããçµè·¯åŸ©å
ã¯åçèšç»æ³ã®åŸ©å
ãšåããããªèãæ¹ã§è¡ããŸãã
äžè¬çã«ãåçèšç»æ³ã®åŸ©å
ã§ã¯ã
ãAâBãšããé·ç§»ãååšããå®éã«AããBãžé·ç§»ãè¡ãããã®ãšåãçµæãBã«èšé²ãããŠãããšããBãŸã§ã®é·ç§»ã«ãŒãã®äžã«ãAãå«ãŸãããã®ãå¿
ãååšããã
ãšããããšãå©çšããŠåŸ©å
ãè¡ããŸãã
åæ§ã«ãæççµè·¯åé¡ã§ããAããBãŸã§ã®æççµè·¯é·ããAããCãŸã§ã®çµè·¯é·ãšCããBãŸã§ã®çµè·¯é·ã®åã«ãªã£ãŠããå ŽåãAããBãžã®æççµè·¯ã®ãã¡ãCãå«ããã®ãå¿
ãååšããŸãã
å®éã®åŸ©å
ã§ã¯ãCããBãžã®èŸºãæã£ãŠããé ç¹éåããéžæããã©ãã©ãAãžåãã£ãŠããã®ãŒã£ãŠãããŸããèšç®é㯠$O(E)$ ã§ãã
åé¡äŸ
æ¡åŒµãã€ã¯ã¹ãã©
ä¿ã«ãæ¡åŒµãã€ã¯ã¹ãã©ããšåŒã°ããããã€ã¯ã¹ãã©æ³ã®äºçš®ã¢ã«ãŽãªãºã ã«ã€ããŠã®ç޹ä»ãæåŸã«è¡ã£ãŠãèšäºãç· ããããšæããŸããæ
å ±ãªãªã³ããã¯ã§è¶
é »åºãªã®ã§ãç¹ã«äžé«çã¯æŒãããŠãããŸãããã
äžéšã®åé¡ã§ã¯ãäžè¬ã®ãã€ã¯ã¹ãã©æ³ãšéã£ãŠãç§»åå
ãé ç¹ã®æ
å ±ã«ãããªãå¶çŽãããããšããããŸãã
ããšãã°ã2007幎æ
å ±ãªãªã³ããã¯æ¥å宿3æ¥ç®ç¬¬2å Routeã§ã¯ãç§»åããæ¹åã«å¶çŽããããŸãã
ãã®ãããªå Žåãpriority_queueã«è¿œå ããæ
å ±ããæçè·é¢ã®èšé²ã®ããã«ç®¡çããåäœïŒéåžžã¯é ç¹çªå·ã®ã¿ã ããäžã®äŸé¡ã§ã¯ã©ãã®é ç¹ããæ¥ããããªã©ã管çããå¿
èŠãããïŒãæ¡åŒµããããšã§è§£ãããšãã§ããŸãã
æ¡åŒµãã€ã¯ã¹ãã©ã§ã¯ãã©ã®ãããªæ
å ±ã远å ã§ç®¡çããå¿
èŠããããããã£ããèŠæ¥µããããšã倧åã§ãã
ã¡ã¢ãªäœ¿çšéãã®ãªã®ãªã«ãªãããšãå€ãã®ã§ãã¡ã¢ãªãåæžããåªåãæã«ã¯å¿
èŠã§ãããã
åé¡äŸ
- JOI 2017 äºéž 6 - ããã® JOI å
- ICPC 2009 åœå äºéž 4 - 颿£çé床
- ããã¯ã¡ããã³ã³ãã¹ã Day2 G - éåŠè·¯
ãããã«
ä»åã¯ãç«¶æããã°ã©ãã³ã°ã§è¶
é »åºã®æççµè·¯åé¡ã«ã€ããŠç¹éããŸããã
ã°ã©ããšããŠåé¡ãäžããããå Žåã ãã§ãªããæ§ã
ãªãžã£ã³ã«ã®æé©ååé¡ãã°ã©ãã®æççµè·¯åé¡ã«åž°çå¯èœã§ããã°ã©ãã®åé¡ãè§£ããããã«ãªãã ãã§ãªããäžèŠé¢ä¿ã®ãªãåé¡ãã°ã©ãã«åž°çããã¹ãã«ãå¿
èŠã§ãããé 匵ã£ãŠãã ããïŒ
ã§ã¯ããã®ããç«¶ããã©ã€ããïŒ