[欧拉序][树上线段树][LCA] POJ 2763 Housewife Wind

https://cn.vjudge.net/problem/POJ-2763

欧拉序线段树裸题,每次要求出两点之间的距离,单点修改,区间查询。

欧拉序其实就是把树拍扁的一种方法。。。对给定的树先求出欧拉序,在欧拉序上通过权值的正负来抵消多余的往返操作,然后每次求得时候先求LCA,再求出lca到两个端点的距离相加即可。有了欧拉序LCA就是一个rmq问题,用线段树做就能实现动态求lca,然后端点距离可以用BIT或者仍然用线段树做,求和最后输出即为答案。

实现的主要注意点是下标之间的关系。。。。这其中欧拉序求出来的点个数是2*n-1,然后BIT上存储的又是2n-2个间隔,然后BIT差分又得考虑左端点往前移动一下。。

继续阅读“[欧拉序][树上线段树][LCA] POJ 2763 Housewife Wind”

[思维][meet in the middle] codeforces 1023 E

其实也不是正常意义上的meet in the middle了,只是这个处理的思想有点像。(似乎每次做交互题都会卡?

自己做的时候是理解错题目意思了,以为图上只要联通的点都能返回YES,但是其实是按照他的限制下走的时候能走到才能返回YES。这样的话需要考虑的问题就比较好处理了。。。。一开始理解的那种的话根本没法在4*n次询问的限制下做出来。

因为右下半矩阵的路线只能通过询问(1,1)到该点的可行性来获得,左上半矩阵的路线只能通过询问(n,n)到该点的可行性获得,要想获得完整的可行路线只能在交界重合的地方处理,也就是反对角线上的方块。为了使得两个方向的推法能够走到同样的对角线点上,可以采取极端策略,左边的就尽量往下走,右边的尽量往左走,这样两种操作到最后的结果都是相同的,会走到对角线上的极端点(最左下的可行点),这时候就保证了两条路能够接上。 继续阅读“[思维][meet in the middle] codeforces 1023 E”