poj 2749
1、加边视情况加
2、2-SAT里面的c在solve里面千万不要再int c
poj 3581(后缀数组)
- 因为第一个数比后面的大,所以将原串翻转后找出排第$i$位的后缀输出,符合$SA[i]>=2$的最小$i$(后缀数组中的排列是字典序)
- 之后将之前已经处理的数据删掉,然后题目变为将剩下的数据分为两份翻转后字典序最小,那么我们设$S$为这个序列,$S_1, S_2, …, S_k, S_{k+1},…S_n$,其中$k$是分割点,处理后变为$S_k, S_{k-1}, …, S_1, S_n, S_{n-1},…,S_{k+1}$,我们发现这个序列是$S_n, S_{n-1}, …, S_1, S_n, S_{n-1},…,S_{1}$的子串,那么我们将翻转后的数列复制一份放在后面,然后找出排第$i$位的后缀输出,符合$SA[i]>=1, SA[i]∈第一部分$的最小$i$输出。(后缀数组中的排列是字典序,设法构造一个串,使得欲求串的字典序能够求出)
- 输出剩余的数据,即可完成
poj 3728(LCA)
维护6个数组
pre[i][j] i的第2^j个祖先
deep[i] i的深度
up[i][j] i到i的第2^j个祖先的最优解
down[i][j] i的第2^j个祖先到i的最优解
dmax[i][j] i到i的第2^j个祖先路径上的最大值
dmin[i][j] i到i的第2^j个祖先路径上的最小值
然后可以通过倍增维护以上数组,期中包含一些dp思想,此题非常好,作为一个LCA的跳板