07 2013 档案

最小费用最大流——maxflow+SPFA
摘要:最小费用最大流: 即在所有最大流中,要求得到最少费用。(每条边有两个参数:容量cap, 费用cost)。 解法:每次找到费用最小的增广路。(即以费用为权的最短路) 仅需将最大流中的 bfs 替换为SPFA(因为有负权)。代码如下: 1 #define MAXN 1005 2 #define MAXM 10005 3 #define INF 0x3f3f3f3f 4 using namespace std; 5 6 struct P{ 7 int u, v, cap, cost, next; //容量cap, 单位流量费用cost。 8 }e[MAXM*4];... 阅读全文

posted @ 2013-07-29 19:36 KimKyeYu 阅读(591) 评论(0) 推荐(0)

最大流 之 Edmond Karp 算法模版
摘要:算法简介:(复杂度 最坏O(VE^2) ) 不断寻找(bfs) 源点s 和 汇点t 之间的增广路,不断更新s流出量的值 以及 这条路上的 残余网络值,直到找不到增广路。 此时,s流出量的值达到最大,故称之最大流。 增广路:(不同于二分匹配那个) 这条路从源点开始一直一段一段的连到了汇点,并且,这条路上的每一段都满足流量 q;13 memset(vis, 0, sizeof(vis));14 pre[s] = s;15 vis[s] = 1;16 q.push(s);17 while(!q.empty()){18 int p =... 阅读全文

posted @ 2013-07-27 17:16 KimKyeYu 阅读(263) 评论(0) 推荐(0)

hdu 4604 Deque
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4604想了半天,发现是LIS,O(nlgn)飘过。具体思路:预处理好以i为开头的(下面我用逆序输入,所以是以i为结尾的)LIS和LDS。 再枚举每个点找最优即可(注意不严格递增、减)。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #... 阅读全文

posted @ 2013-07-24 21:14 KimKyeYu 阅读(201) 评论(1) 推荐(0)

EOJ 1271 The Tower of Babylon
摘要:http://www.acm.cs.ecnu.edu.cn/problem.php?problemid=1271因为盒子的方向是任意定的,所以把盒子的三个方向都存下来在dp会方便很多 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 using namespace std; 8 9 struct Node10 {11 int x, y, z;12 }b[100];13 int n;14 15 bool cmp(const Node &a, const Node &b)16 {17 ... 阅读全文

posted @ 2013-07-24 20:58 KimKyeYu 阅读(153) 评论(0) 推荐(0)

EOJ-1765 Nested Dolls
摘要:http://acm.cs.ecnu.edu.cn/problem.php?problemid=1765题意:给出一系列物体的宽与高,满足w1 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 #include13 #include14 #include15 #include16 using namespace std;17 struct node{18 int w,h;19 }a[20005];20 bool c... 阅读全文

posted @ 2013-07-23 03:54 KimKyeYu 阅读(251) 评论(1) 推荐(0)

LCA 离线算法 Tarjan
摘要:转载一篇博客:http://www.cnblogs.com/ylfdrib/archive/2010/11/03/1867901.htmlTarjan实现: dfs + 并查集;通过这道题体会一下把:(思路详见上面的博客)hdu 2586 http://acm.hdu.edu.cn/showproblem.php?pid=2586 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 1... 阅读全文

posted @ 2013-07-22 19:45 KimKyeYu 阅读(269) 评论(0) 推荐(0)

EOJ 1180 Inglish-Number Translator
摘要:http://www.acm.cs.ecnu.edu.cn/problem.php?problemid=1180poj 2121 http://poj.org/problem?id=2121题目大意:输入数字的英文写法,输出阿拉伯数字。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 using namespace std; 13 14 mapmy; ... 阅读全文

posted @ 2013-07-17 16:25 KimKyeYu 阅读(255) 评论(0) 推荐(0)

sg 函数模版
摘要:1 #define MAXN 1005 2 3 using namespace std; 4 5 int s[MAXN], ns; //取值集合 6 int sg[10005]; 7 8 int mex(int x) 9 {10 if(sg[x] != -1)11 return sg[x]; 12 bool v[MAXN]; //x的后继集合13 memset(v, 0, sizeof(v));14 for(int i=0; i<ns; i++){ //求后继集合15 int t = x-s... 阅读全文

posted @ 2013-07-17 15:55 KimKyeYu 阅读(183) 评论(1) 推荐(0)

EOJ 1494 Coins
摘要:http://www.acm.cs.ecnu.edu.cn/problem.php?problemid=1494poj 1742 http://poj.org/problem?id=1742这题是一个部分背包,本来想过用二分的方法变成一个0-1背包,时间复杂度为(nlogV*V),但是还是超时了,所以要优化成(nV)的才能过 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 10 int dp[100005], cou[100... 阅读全文

posted @ 2013-07-16 13:25 KimKyeYu 阅读(246) 评论(0) 推荐(0)

EOJ 2743 Stock Exchange
摘要:EOJ 2743 http://acm.cs.ecnu.edu.cn/problem.php?problemid=2743本题为LIS:即Longest Increasing Sequence.(本题中严格递增)最长上升子序列(LIS)长度的O(nlogn)算法:(对状态转移时查找的优化) 用len[ i ]存放当前(需不断更新) 长度为 i 的上升子序列的末尾 的最小值, 注意到,len[]严格递增,可对其进行二分查找, 找到最大的i ,且满足len[ i ] 2 #include 3 #include 4 #include 5 #include 6 #include 7 ... 阅读全文

posted @ 2013-07-13 21:18 KimKyeYu 阅读(282) 评论(0) 推荐(0)

POJ-3468 A Simple Problem with Integers
摘要:http://poj.org/problem?id=3468第一次手写的线段树,以后就用这个做模板好了。自己风格的线段树:(区段更新 1 #define maxn 100005 2 #define ls(p) p=L && R>=r){37 t[p].f+=v;38 ... 阅读全文

posted @ 2013-07-13 01:30 KimKyeYu 阅读(320) 评论(0) 推荐(0)

EOJ-1104 bitmap
摘要:http://acm.cs.ecnu.edu.cn/problem.php?problemid=1104题意:给一张只有1和0的图,求图上所有'0'的点到'1'的点的最短距离.解法:若对每个0进行BFS到1的距离会超时,故从每个1进行BFS,更新到每个0的距离,可假象有一个源点连接着所有的1,从该源点进行BFS的搜索就可以达成一遍BFS更新所有0,方法即 先将所有1的点入队后,再进行BFS。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #includ 阅读全文

posted @ 2013-07-11 21:17 KimKyeYu 阅读(191) 评论(0) 推荐(0)

【转】旋转卡壳——凸多边形间对踵点对(定义)
摘要:凸多边形间对踵点对有向切线一个有向切线就如同其名字所阐述的。 有向切线在区分平行切线同向与反向时候是十分必要的。 进一步假设多边形是顺时针序的(当顶点顺序排布时候是顺时针的)并且多边形的切线当多边形在线的右侧时候是正向的。 相反的, 当多边形在切线的左侧时多边形能够按照逆时针序给出。 虽然只是约定, 但制定一些标准, 来避免混淆结构与结果是必要的。 并且采用这个约定绝不会影响结果并且带来任何限制。 注意: 切线的定义导出了对踵点对. 凸多边形间的对踵点对给定两个多边形 P 和 Q, 一对点 (p, q) (分别属于 P 和 Q), 当通过 p 和 q 的(有向)平行切线指向不同的方向时, 他们 阅读全文

posted @ 2013-07-11 20:15 KimKyeYu 阅读(584) 评论(0) 推荐(0)

EOJ 1126 最近点对(二分)
摘要:http://www.acm.cs.ecnu.edu.cn/problem.php?problemid=1126hdu 1007 http://acm.hdu.edu.cn/showproblem.php?pid=1007 求最近点对的距离。主要思想就是分治。先把n个点按x坐标排序,然后求左边n/2个和右边n/2个的最近距离,最后合并。合并要重点说一下,比较麻烦。 首先,假设点是n个,编号为1到n。我们要分治求,则找一个中间的编号mid,先求出1到mid点的最近距离设为d1,还有mid+1到n的最近距离设为d2。这里的点需要按x坐标的顺序排好,并且假设这些点中,没有2点在同一个位置。(若有,则 阅读全文

posted @ 2013-07-11 18:47 KimKyeYu 阅读(367) 评论(0) 推荐(0)

EOJ 2067 Building Roads
摘要:http://www.acm.cs.ecnu.edu.cn/problem.php?problemid=2067poj 3625 http://poj.org/problem?id=3625题目大意:有N个农场,现在给出他们的坐标,并且已经知道了有些农场他们之间是已经相连的了,现在问怎么连最小的边,能将这些农场都连接起来解题思路:变相的最小生成树,即将已经连起来的边的权值置为-1,那么根据prim算法,优先选的就是那条-1边,这样我们在选边的时候,如果是-1边我们就可以不用加进来 1 #include 2 #include 3 #include 4 #include 5 using n... 阅读全文

posted @ 2013-07-11 16:33 KimKyeYu 阅读(331) 评论(1) 推荐(0)

EOJ-2104 小强过桥
摘要:http://acm.cs.ecnu.edu.cn/problem.php?problemid=2104题意:给出n个节点之间路径的载重量,求出从s点到t点的可行的最大载重量。解法:n的数据量10^6,只能用邻接表存储,二分枚举最大载重量,用BFS遍历图判断是否合理,直到得到最优解。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 #include13 #include14 #include15 # 阅读全文

posted @ 2013-07-10 19:17 KimKyeYu 阅读(227) 评论(0) 推荐(0)

EOJ-2518 Guarding the Farm
摘要:http://acm.cs.ecnu.edu.cn/problem.php?problemid=2518题意:给出一张图,求出其hilltop的个数。hilltop的定义:一片相同高度的区域,而周围的区域的高度都小于它,或处于图的边缘。周围的区域:与某片区域高度不相同的区域,且范围是向八个方向延伸。DFS搜索某个点,并记录,搜索周围八个方向,若有一个点大于它则这块区域不是HILLTOP。标记周围所有与它高度相同的点防止重复搜索。 1 #include 2 #include 3 #include 4 using namespace std; 5 int mat[105][75]; 6 bool 阅读全文

posted @ 2013-07-09 10:22 KimKyeYu 阅读(229) 评论(0) 推荐(0)

EOJ-2064 Bookshelf 2
摘要:http://acm.cs.ecnu.edu.cn/problem.php?problemid=2064大致题意:给出一些物品的体积与体积上限,选出一些物品,使得物品总体积大于等于体积上限且差值最小,求出这个差值n 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include10 #include11 #include12 #include13 #include14 #include15 #include16 using namespace std;17 int a[21],nex 阅读全文

posted @ 2013-07-08 22:40 KimKyeYu 阅读(206) 评论(0) 推荐(0)

EOJ-2069 Asteroids
摘要:http://acm.cs.ecnu.edu.cn/problem.php?problemid=2069poj 3041题意:给出一系列的正整数坐标点,求最少需要几条直线覆盖所有点。思路:每个点可以由一条垂直的线或一条平行的线覆盖,用匈牙利算法计算出最大匹配,则是需要的直线的数目(意思为若有的点未被匹配到,那一定会被已连接它的某条线覆盖,可以想象成我找了一些横坐标不同的点,然后找每个x方向上的点的纵向是否能够匹配掉一些点,则这些可用垂直线连接)。若有点x,y 则x->y就有一条通路,每次x匹配y,若y已经被匹配,则看y的顶点是否有增广路径(即有其他的点x',y') 1 # 阅读全文

posted @ 2013-07-08 20:55 KimKyeYu 阅读(255) 评论(0) 推荐(0)

EOJ-1855 Expedition
摘要:http://acm.cs.ecnu.edu.cn/problem.php?problemid=1855题意:一辆车每行驶一单位的路程就消耗一单位的油,给出n个加油站以及他们的位置和可加油量,给出初始油量P和车与目的地的位置L,求需要加油的最少次数。思路:贪心,先把初始P全部耗尽看能走的路程是否超过L,否则就加一次油。将新路程加上当前途中经过的加油站能加油量的最大值,直到能行驶的路程大于等于L。因为考虑加油量有重复的情况,这里用了堆,优先队列,每次出队的是队内元素的最大值。 1 #include 2 #include 3 #include 4 #include 5 #include 6 #in 阅读全文

posted @ 2013-07-08 00:49 KimKyeYu 阅读(386) 评论(0) 推荐(0)

EOJ 1068 石子游戏-B
摘要:http://acm.cs.ecnu.edu.cn/problem.php?problemid=1068题意: 该题比一般的NIMM博弈多了每次取1-m个的限制,容易联想到巴什博奕。解题思路: 把每堆数量减少到 2 #include 3 #include 4 #include 5 #include 6 #include 7 8 using namespace std; 9 10 int main()11 {12 //freopen("testin.txt", "r", stdin);13 //freopen("testout.txt" 阅读全文

posted @ 2013-07-07 22:07 KimKyeYu 阅读(304) 评论(0) 推荐(0)

二分图匹配(匈牙利算法模板)
摘要:最大匹配——匈牙利算法 1 /**************************************************** 2 二分图匹配(匈牙利算法的DFS实现) 3 INIT:g[][]两边定点划分的情况 4 CALL:res=hungary();输出最大匹配数 5 优点:适于稠密图,DFS找增广路快,实现简洁易于理解 6 时间复杂度:O(VE); 7 ****************************************************/ 8 #include 9 #include 10 #include 11 using namespace std;12. 阅读全文

posted @ 2013-07-07 12:49 KimKyeYu 阅读(221) 评论(0) 推荐(0)

【转】HDOJ题目分类
摘要:模拟题, 枚举1002 1004 1013 1015 1017 1020 1022 1029 1031 1033 1034 1035 1036 1037 1039 1042 1047 1048 1049 1050 1057 1062 1063 1064 1070 1073 1075 1082 1083 1084 1088 1106 1107 1113 1117 1119 1128 1129 1144 1148 1157 1161 1170 1172 1177 1197 1200 1201 1202 1205 1209 1212(大数取模) 1216(链表)1218 1219 1225 1228 阅读全文

posted @ 2013-07-07 12:42 KimKyeYu 阅读(383) 评论(0) 推荐(0)

【转】ACM 取石子问题
摘要:取石子问题有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够取胜。(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规定每次至少取一个,最多取m个。最后取光者得胜。 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个,后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的 法则:如果n=(m+1)r+s,(r为任意自然数,s≤m),那么先取者要拿走 阅读全文

posted @ 2013-07-07 12:37 KimKyeYu 阅读(321) 评论(0) 推荐(0)

【转】ACM博弈知识汇总
摘要:博弈知识汇总有一种很有意思的游戏,就是有物体若干堆,可以是火柴棍或是围棋子等等均可。两个 人轮流从堆中取物体若干,规定最后取光物体者取胜。这是我国民间很古老的一个游戏 ,别看这游戏极其简单,却蕴含着深刻的数学原理。下面我们来分析一下要如何才能够 取胜。(一)巴什博奕(Bash Game):只有一堆n个物品,两个人轮流从这堆物品中取物,规 定每次至少取一个,最多取m个。最后取光者得胜。 显然,如果n=m+1,那么由于一次最多只能取m个,所以,无论先取者拿走多少个, 后取者都能够一次拿走剩余的物品,后者取胜。因此我们发现了如何取胜的法则:如果 n=(m+1)r+s,(r为任意自然数,s≤m),那么 阅读全文

posted @ 2013-07-07 12:33 KimKyeYu 阅读(229) 评论(0) 推荐(0)

EOJ 2857 编辑距离
摘要:http://www.acm.cs.ecnu.edu.cn/problem.php?problemid=2857一道典型dp,状态转移方程类似LCS。操作有三种:1修改一个字母,2删除一个字母,3插入一个字母。对于dp[i][j],能从如下状态转移而来: if(a[i] == b[j]) 不操作—— 对应状态dp[i-1][j-1]; else 操作1——a[i]改成b[j], 对应状态dp[i-1][j-1]+1; 操作2——删a[i], 对应状态dp[i-1][j]+1; 操作3——在a[i], a[i+1]间插入m,使 m = b[j], 对应状态... 阅读全文

posted @ 2013-07-05 15:32 KimKyeYu 阅读(228) 评论(0) 推荐(0)

EOJ 1047 Guardian of Decency
摘要:EOJ 1047 http://acm.cs.ecnu.edu.cn/problem.php?problemid=1047POJ 2771 http://poj.org/problem?id=2771二分匹配 不说了,直接上代码 1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 using namespace std; 9 10 #define MAXN 505 11 struct node 12 { 13 int h; 14 char ... 阅读全文

posted @ 2013-07-04 22:45 KimKyeYu 阅读(212) 评论(0) 推荐(0)

EOJ-1853 Mountain Walking
摘要:http://acm.cs.ecnu.edu.cn/problem.php?problemid=1853题意,从图的左上角走到图的右下角,寻找一条路径使得路径上的数字的MAX-MIN最小(不在意路径的长度)直接DFS剪枝比较难写(也感觉要T),看到差值最大为110,用二分枚举了差值(MAX-MIN)(从0到110),再枚举了图上的最小值。大意就是,先二分枚举差值m,再枚举图中可能的最小值a(从真·最小值到真·最大值),min=a,max=a+m。接着对起点DFS,看能否在min 2 #include 3 #include 4 #include 5 #include 6 #i 阅读全文

posted @ 2013-07-04 02:14 KimKyeYu 阅读(266) 评论(0) 推荐(0)

EOJ 1186 Anniversary party
摘要:EOJ 1186 http://acm.cs.ecnu.edu.cn/problem.php?problemid=1186题意:给定一棵树,选取一定的节点,相邻父子节点不可同时选取。 树型dp,不能简单地用并查集分组。 题解: http://blog.csdn.net/woshi250hua/article/details/7641589 1 //hdu 2 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 12 using namesp... 阅读全文

posted @ 2013-07-03 17:19 KimKyeYu 阅读(244) 评论(0) 推荐(0)

EOJ 2113 WY II
摘要:EOJ 2113 http://acm.cs.ecnu.edu.cn/problem.php?problemid=2113题意:背包问题,注意到N很小30,V很大10^7,故用dfs。简单的dfs——O(2^N),这里需用剪枝。引用背包九讲:基本的剪枝方法不外乎可行性剪枝或最优性剪枝。1.可行性剪枝即判断按照当前的搜索路径搜下去能否找到一个可行解,例如:若将剩下所有物品都放入背包仍然无法将背包充满(设题目要求必须将背包充满),则剪枝。2.最优性剪枝即判断按照当前的搜索路径搜下去能否找到一个最优解,例如:若加上剩下所有物品的权值也无法得到比当前得到的最优解更优的解,则剪枝。这题用2.最优性剪枝。 阅读全文

posted @ 2013-07-03 15:59 KimKyeYu 阅读(224) 评论(0) 推荐(0)

EOJ-2144 抗震机械制造
摘要:http://acm.cs.ecnu.edu.cn/problem.php?problemid=2144题意:给出n种物品以及m种材料,每种物品由不同材料制成,每种材料需要一定的资金(付钱后可无限用),求资金不超过给定p的情况下能造出的最多种类物品题目用二进制的方式表示物品由哪些材料构成,1表示选,0表示不选,使用时转化为十进制,过程以二进制为主。思路:记下每个物品的材料状态(二进制转化为十进制)(a[i]),在资金不超过限定的条件下,选取包含给出物品材料状态的某种状态。假设某物品的材料状态为1010,则所有包含其状态的情况,都可以制造出该物品(如1110,1111,1011),即如果没有资金 阅读全文

posted @ 2013-07-02 22:40 KimKyeYu 阅读(258) 评论(0) 推荐(0)

EOJ 1087 As long As possible
摘要:EOJ 1087http://acm.cs.ecnu.edu.cn/problem.php?problemid=1087POJ 1383题意:参看了别人的思路,此题无环,即树的最长路。 思路来自以下链接,写的很好,我就不献丑了。 http://blog.csdn.net/nvfumayx/article/details/7540465贴个代码: 1 //poj 1383 2 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #define MAXN 100510 11 using nam... 阅读全文

posted @ 2013-07-02 15:58 KimKyeYu 阅读(287) 评论(0) 推荐(0)

导航