POJ1964
O(NM)悬线法求最大子矩形。悬线定义为一点到其上方最近的坏点(或边界)的线段。h[]、l[]、r[]分别表示(i,j)点悬线的长度、最多向左拓展多远、最多向右拓展多远,三个数组都由(i-1,j)及附近的坏点转移过来。POJ1734 floyd找最小环并输出方案。主要部分是两个dist数组,其中一个不进行更新。在以k为中间点更新之前,枚举一下k作为最大点的环。ans=min(dist[i,j]+graph[i,k]+graph[k,j])graph为不更新的距离数组。需要注意的是出现了三个数值相加,需要注意OO大小的设置。POJ1730 给出X,求X=b^p的最大的p。先将X分解质因数,求出每个质因数的指数,求这些指数的最大公约数。注意X可能为负数。POJ1679 判断一个图的MST是否唯一。除了短边求次小生成树之外,还可以用另一种方法求解:将边权相等的边化为一组,每次扫描一组,先看每条边需不需要而不进行合并。再将这一组扫一遍,同时进行合并,看哪些边原来需要但是现在不需要,说明有某些边的作用相同,MST不唯一。如果用次小生成树的要判断次小生成树的点数,因为肯能出现边权为0。POJ1602 非常不错的一道题。第一问显然,现在我们处理第二问。我们将给定的数组记为b[],排序后记为a[],则此时1-n的a[i]、b[i]一定是排好序后的从头到尾每个字符串的首尾字母。我们在a[]中找到给定的开头字母,则对应的b[i]就是最后一个字母。因为是按照首字母+出现位置排序,则以最后一个字母开头的串一定是同一个字母开头的最后一个。将这个字母做开头倒序扫描找到对应的结尾字母是原串的倒数第二个,以此类推直到找全。一开始的想法是将一个字母作为结尾字母去找,但是所对应的开头字母无法确定。