摘要: 现在打算重新学习图论的一些基础算法,包括像桥,割顶,双连通分量,强连通分量这些基础算法我都打算重敲一次,因为这些量都是可以用tarjan的算法求得的,这次的割顶算是对tarjan的那一类算法的理解的再次实现吧,后面打算做一下桥的判断和边双连通的关系,边双连通处理的时候如果又重边的话会很不一样,割顶也会相应的不一样,这里的代码是没有考虑重边的,后面再写一个考虑重边的吧。#pragma warning(disable:4996)#include#include#include#include#include#include#include#define maxn 150using namespac 阅读全文
posted @ 2014-02-23 23:38 chanme 阅读(275) 评论(0) 推荐(0) 编辑
摘要: 又是不带修改的区间第k大,这次用的是一个不同的方法,划分树,划分树感觉上是模拟了快速排序的过程,依照pivot不断地往下划分,然后每一层多存一个toleft[i]数组,就可以知道在这一层里从0到i里有多少个被划分到了左子树,知道区间有多少个被分到左子树,就可以一路递归下去,不需要像函数式线段数一样,二分再加query,所以每次询问的复杂度也只是O(nlogn),空间复杂度的话就是O(nlogn),具体的介绍很多个链接都有,具体看下面给出的两个链接,它们对我起到非常大的帮助。http://blog.csdn.net/famousdt/article/details/7064866http://w 阅读全文
posted @ 2014-02-23 17:28 chanme 阅读(177) 评论(0) 推荐(0) 编辑
摘要: Manacher算法是O(n)求最长回文子串的算法,其原理很多别的博客都有介绍,代码用的是clj模板里的,写的确实是异常的简洁,现在的我只能理解个大概,下面这个网址的介绍比较接近于这个模板,以后再好好理解,我现在先放一放http://www.starvae.com/?p=212#pragma warning(disable:4996)#include#include#include#include#include#include#includeusing namespace std;void palindrome(char cs[], int len[], int n) { //len[i] 阅读全文
posted @ 2014-02-23 13:36 chanme 阅读(174) 评论(0) 推荐(0) 编辑