摘要: 题意:有多种汇币,汇币之间可以交换,这需要手续费,当你用100A币交换B币时,A到B的汇率是29.75,手续费是0.39,那么你可以得到(100 - 0.39) * 29.75 = 2963.3975 B币。问s币的金额经过交换最终得到的s币金额数能否增加分析:相当于求正权回路,dis[a]表示a点的资金。若dis[b]<(dis[a]-a转化b的手续费)*rate,显然可以更新dis[b]=(dis[a]-a转化b的手续费)*rate。以此类推,如果可以使金额增加,则说明可以存在一个回路不断增加金币数。一点小想法:开始有个想法,那就是觉得正权回路必须经过s,在想怎么判断产生的回路经不经 阅读全文
posted @ 2012-08-28 21:58 Missa 阅读(624) 评论(0) 推荐(0) 编辑
摘要: 原文在这里:http://www.cppblog.com/apple365/archive/2008/11/27/67943.htmlBellman-Ford 算法及其优化Bellman-Ford算法及其优化Bellman-Ford算法与另一个非常著名的Dijkstra算法一样,用于求解单源点最短路径问题。Bellman-ford算法除了可求解边权均非负的问题外,还可以解决存在负权边的问题(意义是什么,好好思考),而Dijkstra算法只能处理边权非负的问题,因此Bellman-Ford算法的适用面要广泛一些。但是,原始的Bellman-Ford算法时间复杂度为O(VE),比Dijkstra算 阅读全文
posted @ 2012-08-28 21:31 Missa 阅读(238) 评论(0) 推荐(0) 编辑
摘要: 题意:n头牛编号为1到n,按照编号的顺序排成一列,每两头牛的之间的距离 >= 0。这些牛的距离存在着一些约束关系:1.有ml组(u, v, w)的约束关系,表示牛[u]和牛[v]之间的距离必须 <= w。2.有md组(u, v, w)的约束关系,表示牛[u]和牛[v]之间的距离必须 >= w。问如果这n头无法排成队伍,则输出-1,如果牛[1]和牛[n]的距离可以无限远,则输出-2,否则则输出牛[1]和牛[n]之间的最大距离。分析:三个式子:1、s[i+1]-s[i]>=0 ==> s[i]-s[i+1]<=02、ML 时:s[end]-s[st]<=x 阅读全文
posted @ 2012-08-28 15:46 Missa 阅读(137) 评论(0) 推荐(0) 编辑
摘要: 题意:已知一个序列a[1], a[2], ......, a[n],给出它的若干子序列以及对该子序列的约束条件,例如a[si], a[si+1], a[si+2], ......, a[si+ni],且a[si]+a[si+1]+a[si+2]+......+a[si+ni] < or > ki。转化:a[a] + a[a+1] + …… + a[b] < c 可以转化成前n项和sum[b] - sum[a - 1] < c,为了能用Bellman_Ford,即将< 转化成 <= ,sum[b] - sum[a - 1] <= c - 1。注意:1,松 阅读全文
posted @ 2012-08-28 12:17 Missa 阅读(147) 评论(0) 推荐(0) 编辑
摘要: 输入的边有两种格式: 1. 边长确定,即xi - xj = b; 可以转化成 xi - xj <= b(xj>= xi +(-b)) 和 xi - xj >=b (即 xj - xi <= -b). 2. 边长不定,xi - xj >= 1; 可以转化成 xj - xi <= -1;分析:差分约束View Code 1 #include <iostream> 2 #include <cstdio> 3 #include <cstring> 4 #include <algorithm> 5 6 using nam 阅读全文
posted @ 2012-08-28 01:36 Missa 阅读(319) 评论(0) 推荐(0) 编辑