随笔分类 - ACM模板
摘要:已上传至GitHub:https://github.com/xysmlx/The-Code-Library-of-xiaohaixiaohai队的ACM模板,尽可能地收集了ACM/ICPC算法,LaTeX排版,编译建议使用PDFLaTeX为了便于打印,将模板分为两册Vol1Part I-III:Fu...
阅读全文
摘要:Dancing Links (DLX)是Knuth为了解决精确覆盖问题而提出的算法,很多搜索问题可以转化位精确覆盖问题从而使用Dancing Links解决(效率会比DFS高很多,因为里面常常蕴涵着意想不到的剪枝)信息学竞赛中的DLX的问题类似网络流,只需建图+贴版即可参考文献:1、DLX的原理:K...
阅读全文
摘要:题目:http://poj.org/problem?id=1084题意:给你一个n*n(n 17 #include 18 #include 19 #include 20 #include 21 #include 22 #include 23 #include 24 #include ...
阅读全文
摘要:题目:http://poj.org/problem?id=2676题意:数独,每行1-9,每列1-9,每3*3小格1-9,填数,不能重复方法:Dancing Links(16ms)或者DFS暴搜(400-900ms)Dancing Links(DLX) 是为了解决矩阵精确覆盖问题的算法,算法效率非常...
阅读全文
摘要:题目:http://acm.hdu.edu.cn/showproblem.php?pid=1535题意:有向图,求点1到点2-n的最短距离之和以及点2-n到点1的最短距离之和方法:1、跑1为原点的最短路2、反向建图(把有向图的边反向,(u,v,w)变成(v,u,w)),跑1为原点的最短路3、将两者距...
阅读全文
摘要:题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3625题意:注意:1、欧拉常数为euler=0.57721566490153286060651209euler=0.577215664901532860606512092、用long double3、输出方法:两种cout setpr...
阅读全文
摘要:题目:http://www.spoj.com/problems/PROFIT/题意:n个中转站,每个站建立花费Xim个客户,每个客户需要中转站Ai,Bi,获得收益为Ci求最大收益最大闭合权子图(详见《最小割模型在信息学竞赛中的应用》)闭合图:有向图的点集,集合中的点的出边都指向点集内部的点,$(u,...
阅读全文
摘要:题目:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3668题意:给一个初始值为0的长度为n的区间,给m个约束l,r,a,b,表示从l到r的区间和>=a且 17 #include 18 #include 19 #incl...
阅读全文
摘要:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3781题意:在n*m矩阵的图定义连通区域为x值或y值相同且颜色相同的连通,连通具有传递性每次可以把一个连通区域颜色反转(O变X,X变O)问把所有块的颜色变为X最小的步数方法:很...
阅读全文
摘要:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3720题意:在一个矩形区域投掷飞镖,因此飞镖只会落在整点上,投到每个点的得分是Ax+By。矩形区域里面有个多边形,如果飞镖投在多边形里面则得分,求最终的得分期望。即:给定一个矩...
阅读全文
摘要:http://poj.org/problem?id=3264给定一个50000的数组,200000次查询,每次查询求区间的最大值与最小值之差明显的线段树的版题,维护区间最大值和最小值第一道线段树的题目! 1 // #pragma comment(linker, "/STACK:102400000,...
阅读全文
摘要:http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=2364裸的最大流。。。用了Dinic、ISAP、HLPP都TLE。。。然后在网上看到了个贪心预流的优化,就AC了,2030ms贪心预流仅用于预处理分层图网络流HLPP一般适合处理分层图,但是怎么加了贪心预流还是T了。。DINIC和ISAP加了贪心预流就AC了。。同时附上Dinic和贪心预流模板~ 1 //#pragma comment(linker, "/STACK:102400000,102400000") 2 #include 3 #include
阅读全文
摘要:http://acm.sgu.ru/problem.php?contest=0&problem=286先找欧拉回路,再做二分匹配,输出匹配有一道题和这个很像:HDU 3551 Hard Problem(带花树匹配)但是这道题用带花树内存开不下匹配的数组。。。 1 /** 2 *先找欧拉回路,再做二分匹配,输出匹配 3 *场上想的是用带花树做,因为之前做过一道类似的题:HDU 3551 Hard Problem 4 *设边e(u,v),则将(u,e) (v,e') (e,e')连起来 5 *注意u有deg[u]-D[u]-1个顶点,v同样,e,e'表示将边e拆成e
阅读全文
摘要:http://acm.sgu.ru/problem.php?contest=0&problem=242网络流+打印路径原点和人建立权为1的边,人和学校建立权为1的边,学校和汇点建权为2的边最大流是2*k则yes,否则no顺便附上修改自他人的带各种优化的Dinic模板~ 1 /** 2 *网络流+打印路径 3 *原点和人建立权为1的边,学校和汇点建权为2的边 4 *最大流是2*k则yes,否则no 5 * 6 *@Author: xysmlx xiaohai 7 */ 8 //#pragma comment(linker, "/STACK:102400000,102400000
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4687题意:找到所有的最大匹配,然后输出不在任何最大匹配中的边的序号解法:贴板题,一般图的最大匹配,带花树算法,然后求暴力枚举去掉一条边的最大匹配数与原最大匹配数比较赛后才知道带花树算法直接用的标程的带花树算法的模板。。。 1 /** 2 *版题。。。之前不知道这个算法。。。 3 *一般图的最大匹配:带花树算法 4 *暴力枚举去掉一条边的最大匹配数与原最大匹配数比较 5 * 6 *@Author: xiaohai 7 */ 8 //#pragma comment(linker, "/STACK...
阅读全文
摘要:http://poj.org/problem?id=3177先找双连通分量缩点,然后找桥重新构图成树,然后找树的叶子节点答案是:(树的叶子节点+1)/2顺便附上双连通分量的模板 1 //#pragma comment(linker, "/STACK:102400000,102400000") 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 #inc
阅读全文
摘要:http://acm.hdu.edu.cn/showproblem.php?pid=4685先找最大匹配数ret然后把将n这一边的大于n的m-ret与m这一边的n+m-ret边连起来,将n这一边的n+m-ret与m这一边的大于m的n-ret连起来,做最大匹配,得到一个匹配然后根据这个匹配找强连通分量,属于同一强连通分量的priceness和price可以任意配同一强连通分量的所有priceness可以给同一强连通分量的price。用hopcroft-karp算法890ms,用匈牙利算法2656ms。。。顺便在代码中附上hopcroft-karp算法和找强连通分量的模板~ 1 /** 2 *..
阅读全文
摘要:1 /** 2 *2-SAT模板,Modified Edition of LRJ 3 *输入:按照法则添加边(参数为2*i或者2*i+1) 4 *运行:先init(n),再add(),再solve() 5 *输出:mark[](1表示选中),solve()(是否有解) 6 */ 7 const int maxn = 0; 8 struct TwoSAT 9 { 10 int n; 11 vector G[maxn*2]; 12 bool mark[maxn*2]; 13 int S[maxn*2], c; 14 15 bool df...
阅读全文