2011年7月21日

树状数组:第K大值

摘要: 以POJ 2985为例,具体的写在程序里。思路都是基于二分的思想。 下面是(LogN)^2的方法/* 题意:某人养了很多猫,他会把一些猫合并成一组,并且会询问第k大组有几只猫 算法:处理集合用并查集,动态更新第K值用树状数组,具体的看注释 2011-07-21 19:59*/#include <stdio.h>#define MAXN 300000int a[MAXN], c[MAXN], f[M... 阅读全文

posted @ 2011-07-21 20:45 oa414 阅读(2967) 评论(2) 推荐(5) 编辑

费用流:餐巾计划

摘要: 很少会在这里会专门为了一道题而写点东西。毕竟只想把这里当作个人关于算法与数据结构/算法竞赛相关的知识整理的地方,不想弄得太杂、太乱。但是仰慕这道题很久了,而且为了这道题思路确实很巧妙。更重要的是,虽然此题除了10行左右的建模就是一个裸的最小费用最大流,但是我做这题前后花了不下6小时,费用流敲了3遍,每个程序都一个一个字母看过去,结果最后发现都犯了最傻的错误,有的少了一个+ 1,有的只是scanf里... 阅读全文

posted @ 2011-07-21 17:26 oa414 阅读(462) 评论(0) 推荐(0) 编辑

2011年7月20日

二维树状数组

摘要: 思路不难,比一维的只多了层循环,代码也很短。详见NOCOW的讲解 POJ 1656/* 题意:一块方格板,要求把一个正方形区域涂黑/涂白/统计黑的数目 算法:二维树状数组 注意:update的时候下标从x和y开始不是习惯的1啊!!!编译前就发现主程序中的错误改了,没想到update函数里也写错了,半天看不出来啊!!! 2011-07-18 14:11*/#include <stdio.h>#def... 阅读全文

posted @ 2011-07-20 12:56 oa414 阅读(1622) 评论(0) 推荐(0) 编辑

求逆序对数的NLogN解法:归并排序、树状数组和线段树

摘要: 定义对于一个包含N个非负整数的数组A[1..n],如果有i < j,且A[ i ]>A[ j ],则称(A[ i] ,A[ j] )为数组A中的一个逆序对。 例如,数组(3,1,4,5,2)的逆序对有(3,1),(3,2),(4,2),(5,2),共4个。 朴素的枚举 双重循环搞定,O(N^2)的复杂度。程序就不写了。 用归并排序思想解决 网上思路很多,理解归并排序就不难解决了。具体的归并排序就不... 阅读全文

posted @ 2011-07-20 12:47 oa414 阅读(3152) 评论(0) 推荐(0) 编辑

2011年7月14日

强联通分量:Kosarajus算法

摘要: 以前接触过,也花了不少时间弄懂,不过当时只是写了一道题,代码也不知道放哪了,几个月下来忘得差不多了。 今日回顾,有温故而知新的感觉。 算法的证明与理解如下,具体的网上/书上都有(摘自《数据结构与算法分析》) 由于V是X在Gr的深度优先搜索树中的一个后裔,因此存在Gr中一条从X到V的路径,从而存在G中中一条从V到X的路径。此外,由于X是根节点,因此X从第一次深度优先搜索得到更高的后续编号。于是,在第... 阅读全文

posted @ 2011-07-14 14:21 oa414 阅读(682) 评论(0) 推荐(0) 编辑

RMQ问题的ST、树状数组和线段树解法

摘要: 至今没有实现ST、树状数组的修改操作,不过线段树应该足够应付大部分题目了。 树状数组:#include <stdio.h>#define MAXN 1000000int n, m, l, r, i, j;int idx[MAXN];int num[MAXN];int min(int a, int b){ return a < b ? a : b;}int lowbit(int x){ return... 阅读全文

posted @ 2011-07-14 08:13 oa414 阅读(356) 评论(1) 推荐(0) 编辑

2011年7月13日

最大流:Ford-Fulkerson方法DFS实现

摘要: 最简单的最大流算法,不断搜索增广路增广。 这是很不划算的算法,因为效率太低了,随便一个数据都能把它卡住。虽然现在10分钟就能打出一个没有错误的SAP,花很长时间搞出这个很不划算。但是,我不能死记一个高级的算法而连最基础的算法都打不出来。竞赛虽然功利,但是学习算法也并不是完全为了竞赛。 在网上找,只能找到几个,因为搞竞赛至少也要用个EK,很少有人做题用DFS的。找到的几个,有的写得太丑了,有的只是给... 阅读全文

posted @ 2011-07-13 12:09 oa414 阅读(1330) 评论(2) 推荐(4) 编辑

北大信科夏令营2011

摘要: 反正真正在考的人看不到,也用不着看,所以结束前发表出来也没什么。 北大信科,当时学校的通知是理科前二十有意向的去报名,估计应该没人吧。如果真的有人去了也是受虐。这种考题非OIer去做……看到考这种ACM赛制的题,我想到是不是就是为了选拔ACM的?今年的PKU在World Final里好像是十三名。 没想到题目还是很水的,不少题理论上都能写出来,而且不少题都有类似的做过。有点后悔没去尝试了,不过即使... 阅读全文

posted @ 2011-07-13 09:26 oa414 阅读(1023) 评论(0) 推荐(0) 编辑

2011年7月10日

网络流/二分图总结(二)

摘要: 上一篇:网络流/二分图总结 上一篇是最基础的代码实现,这次补充一点,顺便总结一下进来做过的网络流题目。 一些算法 最大权闭合图 详见胡伯涛论文,将S与正权点相连,流量为点的权值,将负权点与T相连,流量为改点权值的绝对值。将原图的有向边替换为流量为INF的边,求最小割即最大权。 题目:NOI2006最大获利 二分图最小点权覆盖 连S与左边的点,连T到右边的点,流量为点的权值,二分图原来的边换为流量为... 阅读全文

posted @ 2011-07-10 21:30 oa414 阅读(308) 评论(0) 推荐(0) 编辑

2011年7月8日

可合并优先队列:左偏树和斜堆

摘要: 有时候需要合并优先队列,对于二叉堆,只能以O(N)的复杂度建堆,因为它除了键值和堆序性质其它什么都没有。 要想把合并的复杂度降为O(LogN),可以用斜堆(左偏树),二项堆等数据结构。斐波拉契堆更牛,很多操作都是O(1)的理论复杂度,但是思维复杂度和编程复杂度…… 二项堆了解了一点,但只是半懂不懂地看了点性质之类的,具体的操作还不会。有时间还是想试一下。斐波拉契堆就算了吧…… 左偏树的性质是:左子... 阅读全文

posted @ 2011-07-08 06:09 oa414 阅读(762) 评论(0) 推荐(0) 编辑

导航