PKU 1470 Closest Common Ancestors
http://acm.pku.edu.cn/JudgeOnline/problem?id=1470
解题报告:输入描述的很恐怖,其实用scanf + getchar也可以很简单就写出来,用Tarjan算法要注意,统计祖先的时候要想清楚,不要重复统计和少统计了。
比如:
2
1:(1) 2
2:(0)
2
(1 2) (2 1)
1:2
PKU 1986 Distance Queries
http://acm.pku.edu.cn/JudgeOnline/problem?id=1986
解题报告:这个题构树要用双向边,然后DFS时做访问标记,根节点可以任意选择一个,虽然不同的根节点会导致同一对点的祖先不同,但是它们之间的路径长度是不变的。设d[i]表示从根到i的路径长度,dis(u,v)=d[u] + d[v] - 2*d[LCA(u,v)],很容易想到的。
ZOJ 2859 Matrix Searching
看了网上资料,才意识到是二维的RMQ。第一次做RMQ的题目。
从一维RMQ问题的Sparse Table 算法可以扩展出来。扩展的过程想起来还是比较明了的。
这样预处理的时间复杂度是O(n*n*log n*log n)。查询的复杂度是O(1)
int t[300][9][300][9];
预处理的递推公式:
t[i][a][j][b]= |
循环顺序:
2^(k-1)<n<=2^k |