随笔分类 -  算法竞赛进阶指南

摘要:CH Round #17-C 这个算是一个技能点吧,不点不会,点了就没什么了。懒得写看书吧书上的1应该是0。。。 我又回来了太懒了不想翻书还是写写吧 必须边的判定条件:该边流量为0且两端的点在残余网络不在同一个联通分量 可行边的判定条件:该边流量为0或两端的点在残余网络在同一个联通分量 #inclu 阅读全文
posted @ 2018-08-27 21:29 AKCqhzdy 阅读(339) 评论(0) 推荐(0) 编辑
摘要:bzoj1123: [POI2008]BLO poj3694 先e-DCC缩点,此时图就变成了树,树上每一条边都是桥。对于添加边的操作,相当于和树上一条路径构环,导致该路径上所有边都不成为桥。那么找这条新加边的最近公共祖先,把路径上的所有没被删掉的桥的数量计算出来,未操作之前桥的个数减去该值就是当前 阅读全文
posted @ 2018-08-27 09:00 AKCqhzdy 阅读(443) 评论(0) 推荐(0) 编辑
摘要:凉 bzoj1999 先把树的直径求出来,从左往右枚举,对于当前位置i,找到满足限制并且最远的点j,当前位置最大值就是max(i~j区间内除直径外的子树路径长度最大值,1~i的长度,j~n的长度) 然而,对于树的直径有一个很有用的性质,1~i区间内除直径外的子树路径长度最大值必然不会比1~i的长度大 阅读全文
posted @ 2018-08-26 10:46 AKCqhzdy 阅读(229) 评论(0) 推荐(0) 编辑
摘要:终于会dij了原来我以前写的也是堆优化spfa-_-! poj3662DP 通过spfa来放缩(可怜我去年NOIP的day1t3啊) #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<al 阅读全文
posted @ 2018-08-22 16:45 AKCqhzdy 阅读(357) 评论(0) 推荐(0) 编辑
摘要:怎么说,数位DP还是我的噩梦啊,细节太恐怖了。 但是这章感觉又和之前的学的数位DP有差异?(应该是用DP预处理降低时间复杂度,好劲啊,不过以前都是记忆化搜索的应该不会差多少) poj3208 f[i][0~2]表示第i位,开头连续j个6的情况数,[3]表示魔鬼数的个数,这样可以方便得出区间内有多少魔 阅读全文
posted @ 2018-08-15 21:48 AKCqhzdy 阅读(273) 评论(0) 推荐(0) 编辑
摘要:cf 559C 考虑到黑色的格子很少,那么我把(1,1)变成黑色,然后按每个黑色格子接近终点的程度排序,计算黑色格子不经过另一个黑色格子到达终点的方案,对于当前的格子,要减去在它右下角的所有方案数(注意不是f值) #include<cstdio> #include<iostream> #includ 阅读全文
posted @ 2018-08-15 16:25 AKCqhzdy 阅读(308) 评论(0) 推荐(0) 编辑
摘要:bzoj1563: [NOI2009]诗人小G 还有优化二维区间DP的,形如f[i][j]min{f[i][k]+f[k][j+1]+val(i,j)} 其中val满足四边形不等式,而且对于任意a<=b<=c<=d满足val(a,d)>=val(b,c) 那么f也满足四边形不等式 #include< 阅读全文
posted @ 2018-08-15 11:20 AKCqhzdy 阅读(157) 评论(0) 推荐(0) 编辑
摘要:真的是下定了巨大的决心来搞这一讲,果不其然耗了一晚上 开车旅行(真的是NOIP的题吗怎么这么恐怖) 首先,先用set把小A和小B从城市i出发,到达的下一个城市预处理出来。 f[i][j][k]表示走了2^i天,j城市出发,k表示谁开车,到达那个城市。 转移就是f[i][j][k]=f[i-1][f[ 阅读全文
posted @ 2018-08-13 21:52 AKCqhzdy 阅读(428) 评论(0) 推荐(0) 编辑
摘要:倍增DP太难啦心情好再回去做 poj1821 先让工匠按s排序,f[i][j]表示枚举到第i个工匠涂了j个木板(注意第j个木板不一定要涂) 那么f[i][j]可以直接继承f[i-1][j]和f[i][j-1] 此外 f[i][j]=max(j-l[i]+1<=k<=s[i]){f[i-1][k-1] 阅读全文
posted @ 2018-08-13 16:11 AKCqhzdy 阅读(220) 评论(0) 推荐(0) 编辑
摘要:补写一下 poj3171 设f[i]表示覆盖L~i的最小花费,把区间按左端点排序,枚举区间,f[a[i].r]=min{f[a[i].l~(a[top].r-1)]}+a[i].c (当然还要和原值比较的) #include<cstdio> #include<iostream> #include<c 阅读全文
posted @ 2018-08-13 15:48 AKCqhzdy 阅读(370) 评论(0) 推荐(0) 编辑
摘要:gan这两题怎么差不多 #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; typedef l 阅读全文
posted @ 2018-08-11 15:37 AKCqhzdy 阅读(277) 评论(0) 推荐(0) 编辑
摘要:poj2228 分第一天是否熟睡DP两次 #include<cstdio> #include<iostream> #include<cstring> #include<algorithm> #include<cmath> using namespace std; int n,B,ans,a[4100 阅读全文
posted @ 2018-08-11 09:49 AKCqhzdy 阅读(246) 评论(0) 推荐(0) 编辑
摘要:树形DP我只知道千万别写森林转二叉树慢的要死 没有上司的舞会 水!裸! #include<cstdio> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; stru 阅读全文
posted @ 2018-08-10 21:50 AKCqhzdy 阅读(202) 评论(0) 推荐(0) 编辑
摘要:石子合并 搞笑 #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace std; int s[310]; i 阅读全文
posted @ 2018-08-10 20:31 AKCqhzdy 阅读(250) 评论(0) 推荐(0) 编辑
摘要:还行 前面的题没啥意思 完全背包一个很难写的题poj1015 Jury Compromise poj1742 多重背包啊,开始写了二进制拆分TLE了,由于是判是否可以组成,那么可以用一个贪心的思想,顺着for一个个叠加 #include<cstdio> #include<iostream> #inc 阅读全文
posted @ 2018-08-10 16:34 AKCqhzdy 阅读(222) 评论(0) 推荐(0) 编辑
摘要:数据结构没什么好写的。。分块和整体二分还有点分学得很懂。。果然我还是比较适合这些东西 poj2279 奇怪题,我的想法就是五维记录最边上的一斜排,会M,结果的的确确是锻炼思维的,正解并不是DP2333 LCIS 这个。。。其实还挺常规的吧(脑子一抽),f[i][j]表示第一个匹配到i第二个匹配到j且 阅读全文
posted @ 2018-08-10 15:41 AKCqhzdy 阅读(203) 评论(0) 推荐(0) 编辑
摘要:太菜了才做到并查集啊啊啊啊啊啊啊啊啊啊啊 还是很有收获的说 水 bzoj4195: [Noi2015]程序自动分析 好题 poj1456 感受到并查集传递性的美妙啊!对于一个商品,去找他过期前那天的集合假如大于0相当于可以在这天卖出,然后这个集合和前一个集合合并! #include<cstdio> 阅读全文
posted @ 2018-08-03 20:38 AKCqhzdy 阅读(153) 评论(0) 推荐(0) 编辑
摘要:博弈即玄学啊 (除了nim和二分图博弈什么都不会 算是学了下SG函数吧 这个东西是针对有向图游戏的,相当于把一个局面看作一个点,到达下个局面相当于建一条边 必胜态SG值为0 那么对于一个点,他的SG值就是所有能够到达他的点的SG值的mex 对于有向图游戏的和(也就是有多个有向图同时进行游戏),那么就 阅读全文
posted @ 2018-08-02 18:59 AKCqhzdy 阅读(241) 评论(0) 推荐(0) 编辑
摘要:多重集的组合数公式得记下。cf451E就是这个的裸题 #include<cstdio> #include<iostream> #include<cstring> #include<cstdlib> #include<algorithm> #include<cmath> using namespace 阅读全文
posted @ 2018-08-01 19:47 AKCqhzdy 阅读(303) 评论(0) 推荐(0) 编辑
摘要:组合计算的性质: C(n,m)= m! / (n!(m-n)!) C(n,m)=C(m-n,m); C(n,m)=C(n,m-1)+C(n-1,m-1); 二项式定理:(a+b)^n=sigema(k=0~n) C(k,n)*a^k*b^(n-k) lucas定理:C(n,m)≡C(n%p,m%p) 阅读全文
posted @ 2018-08-01 15:57 AKCqhzdy 阅读(346) 评论(0) 推荐(0) 编辑