上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 66 下一页
摘要: 题意:比赛的时候想了各种的贪心方案,最后还是没有把这题搞出来......废话不多说,题目给定了一条条给定了顺序的路径,这些路径是后面要一一走过的,每条路径有一个长度,单位长度消耗汽油的量以及该条公路上加油站的汽油单价。告诉你路径条数N,油箱容积K,问如何安排加油是的行走完所有路径的花费最少。解法:该题有一个很巧妙的解法就是每到一个油站都加满油箱,队列里面保留了走过前面路径后保留的最便宜的油,每次从队列中取出最便宜的油行进这一段路程。在维持一个汽油价格单调递增时,具体过程如下:1.当队尾不为空时,每次从队尾向前遍历,如果元素单价高于当前路线加油站的汽油单价,替换之,知道遇到价格比其低的汽油或者队 阅读全文
posted @ 2013-05-08 13:38 沐阳 阅读(764) 评论(0) 推荐(1) 编辑
摘要: 题意:给定一系列的数码管,这些数码管由3*3的图形构成,相邻的两个数码管紧挨着的一列是重叠的,现在问一共有多少种可能的情况。解法:将每个数字的可能的显示结果(能亮的地方假设都可以亮)保留起来,然后一个一个数码枚举,一个地方要注意就是相邻意味前面一个数码占用了某一个亮线,那么后面这个数码可以选择是否占用该亮线,而如果前面没用占用该亮线则后面的数码必须占用。使用f[i][j]表示到第i个字符,占用相邻列情况为j时的方案数。代码如下:#include <cstdlib>#include <cstring>#include <cstdio>#include < 阅读全文
posted @ 2013-05-07 23:06 沐阳 阅读(421) 评论(0) 推荐(0) 编辑
摘要: http://wenku.baidu.com/view/56c85dfafab069dc502201a3.html一道非常经典的割的应用。 阅读全文
posted @ 2013-05-06 16:46 沐阳 阅读(185) 评论(0) 推荐(0) 编辑
摘要: 题意:给定若干个房间,现在这些房间之间能够相互的联通,房间门是单向的,现在问一些门中都有人的情况下,至少要堵住多少条门才能够使得无法到达终点。解法:显然这是一个集合的分割问题,即求这样的一个割:使得终点房间与某些存在人的房间的一个分割,题中求的最少的人就是求解一个最小割。将问题转化为网络流求解。通过建立从超级源点到存在人的一些房间,那么从汇点反向遍历寻找这样的一个割。如果从源点到有人房间的边满流,那么反向遍历一定不会将这个节点划分到汇点集合里面去,如果该边不满流的话,如果划分到了汇点集合,则表明存在从源点到汇点的流量,于最大流相悖。因此所求既满足题意。代码如下:#include <cst 阅读全文
posted @ 2013-05-06 16:16 沐阳 阅读(363) 评论(0) 推荐(0) 编辑
摘要: 题意:给定N个点,M条边,每个点为0或者为1,每条边有一个权值。接下来有Q组操作,要么翻转某个点的标号,要么询问某组边的权值一共为多少,总共有三种类型的边:端点分别为(0, 0), (0, 1), (1, 1)。解法:这题的一个蛮力的解法就是记录好每一点的标号,然后O(1)的时间修改编号,对于每次查询就遍历所有的边进行询问。这样的话时间复杂度就是O(q*m)了,显然无法接受。换个好点的,我们首先通过原始数据在输入的时候处理一下,保留好每条边所属的类型。那么在没有点进行修改的话,O(1)时间进行输出。问题就是如果要进行修改的话,一个合理的方式就是修改当前节点所连的边的属性,因为其他于该节点无关的 阅读全文
posted @ 2013-05-02 22:12 沐阳 阅读(1016) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个无向图,要求判定分离两个点的最小割是否唯一。解法:在求出最大流的基础上,从源点进行一次搜索,搜索按照未饱和的边进行,得到顶点子集S的顶点个数;再从汇点反向搜索未饱和的边,得到子集T的顶点个数,判定顶点数相加是否等于总共的顶点数。http://blog.csdn.net/waitfor_/article/details/7330437的文章写的很好,这里截取文中所画的两个图进行说明。(1)正向搜索集合为S,反向搜索集合为T,cnt1和cnt2都是最小割边。很显然M还存在着最小割边,因为从M到T的残余网络也没有流向T的容量了。(2)增加E1这部分边的容量将直接导致网络最大流量增加。增 阅读全文
posted @ 2013-05-01 21:33 沐阳 阅读(1439) 评论(0) 推荐(0) 编辑
摘要: 题意:地球和火星发生了战争。现火星人要在一个N*M的网格降落他们的伞兵,而我们要消灭掉这些伞兵。有这样一种武器,它能够瞬间摧毁网格上某一行或者是某一列的所有目标。然而在哪一行或者哪一列部署这样的武器的花费是不同的。因此要求给出一种最省的方式使得所有的伞兵都能够被消灭。花费的定义是某种部署方案能够消灭所有伞兵,然后根据给定的行列费用把它们相乘即为。希望这一天永远不要到来吧。解法:首先这题应该让无数少男少女想到了二分匹配中做到的关于行列匹配的题吧。只不过这题中并不是所有的行和列等价。而是行列的权值各不相同。类比于原来问题中的最小顶点覆盖,这里就是一个最小点权覆盖,也即使用最小点权和的点集使得所有的 阅读全文
posted @ 2013-05-01 17:37 沐阳 阅读(696) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一个混合图,所谓混合图就是图中既有单向边也有双向边,现在求这样的图是否存在欧拉回路。解法:首先回顾下有向图的欧拉回路的条件是什么:所有的节点出度等于入度。现考虑到下面的这个图的转化过程:假设上方图中的A,B两点代表在有向图存在欧拉回路时任意两点之间连边关系,显然有两个点的入度等于出度。现在考虑改变某条边的关系,那么可以看到新的入度和出入如下图,这一有一个不变量就是任意一个点的入度和出度之差的奇偶性不变。现列步骤如下:1.为任意一条无向边选择一个方向。如果存在欧拉回路的话,那么可以得到每个点入度于出度差至少应满足为偶数。否则一定不能够构成欧拉回路。2.在满足上述条件的基础上,我们需要对 阅读全文
posted @ 2013-05-01 10:57 沐阳 阅读(2065) 评论(0) 推荐(0) 编辑
摘要: 题意:有F快草地,每块草地上有若干奶牛也有避雨点,每个避雨点只能够容纳一定量的奶牛。草地之间有边。现在问所有牛全部到达避雨点的时间是多少?解法:这题和POJ-2112非常相似,做法也差不多,folyd处理之后二分枚举答案。该题的构图稍微难一点,需要考虑到一个流量的控制问题,即当某一点多余的流量流出去后必须在下一个点停止住。自己是把一个点拆成了3个点进行控制,后面学习了别人拆成两个点也能完成。代码如下:#include <cstdlib>#include <cstdio>#include <cstring>#include <iostream>#i 阅读全文
posted @ 2013-04-30 23:31 沐阳 阅读(267) 评论(0) 推荐(0) 编辑
摘要: 题意:给定一些散列的源点会汇点,求解网络流。代码如下:#include <cstdlib>#include <cstring>#include <cstdio>#include <iostream>#include <algorithm>using namespace std;const int INF = 0x3fffffff;const int SS = 105, TT = 106;int n, np, nc, m;struct Edge { int v, c, next; };Edge e[100000];int idx, he 阅读全文
posted @ 2013-04-30 20:32 沐阳 阅读(245) 评论(0) 推荐(0) 编辑
上一页 1 ··· 7 8 9 10 11 12 13 14 15 ··· 66 下一页