CF競賽題目講解_CF791D(樹上啟發(fā)式合并)
2022-06-24 15:07 作者:Clayton_Zhou | 我要投稿
// https://codeforces.com/contest/791/problem/D
// 樹上啟發(fā)式合并
// 如果小熊每次能跳躍的距離為1,那么問題變?yōu)榍髽渖先我鈨牲c(diǎn)之間距離之和。
//? ?f[u][j]:? u子樹中到根節(jié)點(diǎn)1的距離為j=dep(模k)的節(jié)點(diǎn)個(gè)數(shù)
// 樹上任意兩點(diǎn)間距離len=depth[x1]+depth[y1]-2*depth[f],f表示點(diǎn)x1和點(diǎn)y1的最近公共祖先。
? //len = j + r - dep * 2? 為節(jié)點(diǎn)j到節(jié)點(diǎn)r的路徑長度,? 節(jié)點(diǎn)j到根節(jié)點(diǎn)1的距離為j=dep(模k);
? // 如果len不是k的倍數(shù),則加上? ? ? ?rev =( 2*k + dep * 2 -j-r) % k;? 到總跳躍距離ans
// 總跳躍次數(shù)為: 總跳躍距離ans/k
// 4 3
// 1 2
// 1 3
// 2 4
//
//?
//
標(biāo)簽: