摘要:
1.Bellmen-Ford判定负环思路:若经过n轮迭代,算法仍未结束(仍有能产生更新的边),则图中存在负环 若n - 1轮迭代之内,算法结束(所有边满足三角不等式),则图中无负环2.SPFA判定负环思路:设cnt[x]表示从1到x的最短路径包含的边数,cnt[1] ... 阅读全文
摘要:
原题链接:POJ2528解析:这题考察的是线段树子区间更新的维护中的计算可见线段。用离散化,排序去重,但是这题广告是一块瓷砖一块瓷砖贴的,也就是说有可能离散化之后,明明俩个相邻点之前有空白,但是由于离散化分配序号是紧挨着的,就造成了俩块有广告瓷砖紧挨。举个例子,比如四... 阅读全文
摘要:
原题链接:POJ3468解析:本题也是线段树的一种用法,算得上裸题,我用这题来加深对线段树的理解,以及熟悉线段树的模板。郭炜老师的代码是演示指针写法,但我更喜欢用数组来表示,所以改成了我喜欢的模板。PS:刚刚刚刚刚才知道,这种方法是延迟标记,也就是说当对一端区间的叶子... 阅读全文
摘要:
原题链接:POJ3264解析:我拿本题来熟悉线段树模板的,这个应该算是裸题了。代码示例:#include#includeusing namespace std;const int INF = 2e9;int minV = INF;int maxV = -INF;str... 阅读全文
摘要:
代码出自:《算法竞赛入门经典——训练指南》P328#include#include#include#includeusing namespace std;const int maxn = 10005;const int INF = 2147483647;struct ... 阅读全文
摘要:
原题链接:POJ1287解析:这题我用来练习Prim算法的,算是当作一个模板来看。以下代码有几点要说明的:我使用了优先队列,并没有使用dist[u]数组来保存当前子树到 u 的最短距离,这样省去了找最短路的时间 由于队列中存放的最短距离,可能该点已经存在子树中了,所以... 阅读全文
摘要:
原题链接:ZOJ2107解析:此题为最近对模板题,用分治法求最短对问题,可以在O(nlongn)时间内求出。易错点:+ - 等符号与位移运算符 > 优先级没搞清楚,自以为位移运算符比 + - 高 谁减去谁要写正确,因为都是排好序的,所以必然在后面的大于前面的代码实例:... 阅读全文
摘要:
题目链接:POJ3714解析:本题是分治法求最近对问题的应用。唯一变化的是标识flag,如果两个点是同一种类型,那么他们不能链接,就设为inf(无穷大)。其中sqrt()算法耗时很多,尽量可以先用不开根的结果运算,最后再开根,本题我没有这样做。代码示例:#includ... 阅读全文
摘要:
1.求最长上升子序列:1.1 思路:用一个数组d记录到i位置的最长上升子序列d(i),那么第j个位置上的值就可以用前j-1个值来更新,时间复杂度O(N^2)。1.2 代码实例:int d[100005];int LIS(int A[],int n){ memset(d... 阅读全文
摘要:
原题链接:PAT1146解析:这题我第一次做只过了4个点,最后一个超时了。第一次方法是先用删边法求出所有拓扑排序,然后用map,bool>来检查给出的拓扑排序是否正确。然后我想用dfs计算拓扑排序的方法改进,但是书上显然没有对这种方法详细教程,因此试了四五次都过不了。... 阅读全文