破事氵题

Luogu P4281
求三个点的 LCA。其实就是模板的变式。
一种暴力求得三个点的 LCA 的方法是:
设三个点为 \(x,y,z\),求出 \(\text{LCA}(x,y),\text{LCA}(y,z),\text{LCA}(x,z)\),求出 \(x,y,z\) 各自与上面的三个 \(\rm LCA\) 的距离之和,比较一下那个点距离三个 \(\rm LCA\) 的距离之和最小即可。
这种做法优点是易于理解,缺点是需要跑 \(\large \textbf{12}\)\(\rm LCA\),常数极大。卡常也不算难,加上 O2 和快读就能过了。
有时间的时候再补一下更优的解法吧。


[USACO08OCT]Watering Hole
比较明显的一个套路。
如果没有打井,这题就是裸的最小生成树。于是尝试去掉打井这个操作。
分析打井这种行为。井水从哪来的?从地下水里来。
那么就将打井看作是将当前格子与源点 \((n+1)\) 连一条边就行了。


CF52C
如果没有环就是裸的线段树区修区查。
分类讨论。当 \(l\le r\) 时按照普通的模板写。当 \(l>r\) 时把 \([l,r]\) 分成 \([l,n]\)\([1,r]\) 即可。


UVA1152
将条件整理得 \(a+b=-c-d\)
将等式两边看做两个整体。扔进哈希表中处理即可。
使用 map 或 unordered_map 或手写哈希表均可。
(map 似乎在 UVA 的老爷机上过不去)

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章