![](https://img-blog.csdnimg.cn/20201014180756926.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Rush for ICPC
文章平均质量分 65
martin31hao
这个作者很懒,什么都没留下…
展开
-
ZOJ 3308 最小费用最大流
不管是最大流还是费用流,模板一般都不会出什么问题,一般错就错在建图…… 这也是一道裸的套费用流模板的题,不得不说,费用流代码量真是大,初始化什么的完成基本就快100行代码了。 费用流的基本思想是多次最短路,所以在MCMF函数里会看到while(spfa(st, ed))这么个东西。 先贴代码后分析: #include #include #include #include usi原创 2012-10-08 20:44:38 · 599 阅读 · 0 评论 -
Light OJ 1129 Trie树 动态建树
做了一道POJ 2001,对TRIE树的思想差不多理解了。其实TRIE树的思想很简单,就是建树,每个节点都有26个子节点(如果是数字的话,那就是10个),然后每个单词从头到尾按照树的深度找下去,最后所有这些单词就挂在TRIE树上啦。 对于TRIE树的操作有:插入、删除、搜索等等。每个操作都很重要,删除如果没有的话在多组数据中就基本上要MLE了,这道题就是这样,一开始我没有做删除操作,ML原创 2012-10-23 19:30:11 · 538 阅读 · 0 评论 -
POJ 3164 最小树形图
看这个知识点纯属临时抱佛脚,毕竟每年PKU时不时会出些图论的偏知识点,大致了解一下思路也好。 用到的是朱刘算法,具体过程网上都有,我就不赘述了。貌似这道题还是我们WHUACM前辈们出的?题干里好多熟悉的名字啊。 要注意的是,初始化邻接矩阵的时候,和最小生成树一样,都要赋为Inf,否则最后求出来的值就成0了。 #include #include #include #include原创 2012-10-23 16:21:42 · 353 阅读 · 0 评论 -
POJ 1679 最小生成树
题意很简单:给你一些点和边的关系,求最小生成树是否是唯一的,若不唯一,则输出最小生成树的长度。 解题思路:在每次找到一条边之后,看这个新找到的点是否只从一个已经找过的点延伸过来,如果能找到两个以上的点,那么说明最小生成树不止一个,退出判断即可。 但是我一开始在做这道题的时候,思路却是:找到一个新的点P后,从这个原来的点集P'中能否找到一个和新的距离相等的点Q。这个想法之所以错误,是因为原创 2012-10-23 00:26:29 · 592 阅读 · 0 评论 -
POJ 2531 经典的DFS
在8月份做过两遍这道题,做第一次的时候觉得这道题DFS的想法还挺新颖的。做第二次的时候,貌似就已经忘了思路了,这次在CAI的解题表格里又看到了这道题,出于练手的想法,就又做了一遍。 题目大意:有n个点,把这些点分别放到两个集合里,在两个集合的每个点之间都会有权值,求可能形成的最大权值。 思路:1、把这两个集合标记为0和1,先默认所有点都在集合0里。 2原创 2012-10-22 13:33:43 · 5892 阅读 · 0 评论 -
POJ 3678 2-SAT
因为A和B的取值只有0,1,在运算里就可以用2-SAT来解决。 建图过程如下: 1) X AND Y=1,Add(I',J'),Add(J',I'),Add(I,I'),Add(J,J') 2) X AND Y=0,Add(I',J),Add(J',I) 3) X OR Y=1,Add(I,J'),Add(J,I') 4) X OR Y=0,Add(I,J),Add(J,I),Add原创 2012-10-20 20:10:31 · 421 阅读 · 0 评论 -
POJ 2723 2-SAT 第一题
2-SAT的第一题,话说两个月前就看过国家队的论文和PPT,不过当时因为没有好好搞过强连通分量,所以对2-SAT不是很理解。这次回过头来看,思路清晰了不少。 2-SAT一般用在二选一的问题里面,比如说,当你选了a,就不能选b,那么你就可以在a到b'之前连一条边(或者a'到b)。然后2-SAT通过求强连通分量,最后可以得出,是否存在满足条件的选择(比如:使得a和a‘不能同时出现)。 但是在做2-原创 2012-10-20 01:52:40 · 374 阅读 · 0 评论 -
SRM 555 DIV2 555
挺有意思的一道DP,题目大意是说,给你一个01构成的字符串,问你最少切几刀,能把切成的子串都分成5的某一次方,如果不存在,就输出-1。 DP的思路:1、从左往右扫,如果扫到的这一位与之前所有数构成的子串是5的某次方,就记录f[i] = 1; 2、否则,再一重循环,找1~i中子串的数目。 伪代码:原创 2012-10-20 02:30:11 · 354 阅读 · 0 评论 -
Light OJ 1055 BFS
题目大意:给一个图,图上有A,B,C三个小人,每移动一次,都是对三个小人进行同时移动,如果碰到'#',或者其他人的时候就自动不走。 思路:BFS求最短路,但是要同时记录三个人的状态,幸亏这道题的图只有10*10,3个人的状态也就10^6,不至于超内存,否则就要状态压缩了。 在我的思路里,BFS的时候判断不走的条件是:没有碰到'#‘,或者超出边界。所以会出现碰到其他人继续走的情况,wa了两次。后原创 2012-10-16 00:47:39 · 546 阅读 · 0 评论 -
SRM 556 DIV2 解题报告
250:简单的字符串处理题目,因为最多只有50个字符,所以可以用O(n^2)的算法,对从每个位置开始的字符进行扫描,每次扫到了重复的字符即退出此次扫描,并比较长度是否最大即可。 500:看起来很玄乎貌似不可做,但是用搜索既可以解决这个问题,搜索的时候注意要记录城市i,和经过城市i获得的利润的状态,避免重复搜索以至于死循环。搜索用BFS,开一个队列queue > q,初始状态为q.push原创 2012-10-15 15:25:30 · 537 阅读 · 0 评论 -
POJ 2185 KMP中next数组的应用
这道题一开始没明白意思,后来一查,是说给定一个字符矩阵,然后把能够构成这个字符矩阵的最小字符矩阵的字符个数给求出来。 解法是KMP中next数组的应用,先对每一行进行get_next,求出他们的最小公倍数;再对每一列进行get_next,求出最小公倍数。这两步都很好想,然后r * c即可。 坑爹的是,我wa了5、6次都是wa在get_next(char s*)这个函数上。教训就是,以后原创 2012-10-12 21:59:00 · 466 阅读 · 0 评论 -
KMP算法中的NEXT数组的应用
KMP算法中的关键部分就是next数组,没有这个数组的维护,KMP算法根本没法实现。 下面来简单讲一下他的用途,这两天会持续更新: 1、求一个字符串中最长子串:(在保证这个字符串是由这些子串连续构成的情况下) 比如说一个子串:abcabcabc,目测最长子串长度为3。在求next数组的时候,每个字符的值依次为:-1, 0, 0, 0, 1, 2, 3, 4, 5, 6。这时候你会发现原创 2012-10-13 01:11:31 · 840 阅读 · 0 评论 -
<转>KMP算法中关于next数组的探究
转自:http://www.cnblogs.com/cxiaojia/archive/2011/09/16/kmp.html 看了一天的KMP,其中最蛋疼的莫过于next数组的意思了,看了好多人的资料,包括matrix67大牛的博客,看了半天也没搞懂为什么要开个next数组,凑巧搜到这篇文章,讲得还比较清楚。 原文如下: 从《严书》上看到了KMP算法,看了一遍没懂,但觉得挺神转载 2012-10-11 02:26:21 · 520 阅读 · 0 评论 -
ZOJ 3362 无向图费用流
今天看了watashi的解题报告后,才发现不是模板错了,是自己对模板不熟,没仔细想题目。导致应该改模板的地方没有改……-_-! 附上代码: #include #include #include #include #include using namespace std; const int maxn = 111; const int maxm = 55555;原创 2012-10-10 13:58:53 · 494 阅读 · 0 评论 -
Floyd算法的几个用法
1、求多个点之间的最短路,最广为人知的用法:for(int k = 0; k < n; k ++) for(int i = 0; i < n; i ++) for(int j = 0; j < n; j ++) if(a[i][j] > a[i][k] +a[k][j]) a[i][j] = a[i][k] + a[原创 2012-10-09 13:03:35 · 448 阅读 · 0 评论 -
POJ 1149 最大流
最初读完这道题目之后,完全没有什么想法,也根本不会想到用最大流的做法。因为题目的条件似乎很多变:每个顾客打开自己的猪笼后,可以随时变换里面猪的数量,这个条件就给思考上带来了一定难度。 后来到网上看了一下题解,才发现建图是关键。具体建图的思路和过程,详见:http://imlazy.ycool.com/post.2059102.html。只要你知道最大流是干什么的,这个题解肯定能够看懂。原创 2012-10-26 18:47:14 · 405 阅读 · 0 评论