我的OI历程
这个专栏用于记录我的OI学习历程
linkfqy
A link to FQY.
展开
-
【LCT维护生成树】BZOJ3669 [Noi2014]魔法森林
题面在这里考虑枚举a的最大值那么只需要让1→n1→n1\rightarrow n的最大值最小即可这样其实就是在做生成树,若当前构成环,则删去环中的最大边如果1到n联通就更新答案了具体实现可以按a排序,枚举每条边作为最大边用LCT维护生成树,其中最大值信息需要保存边的标号然后因为这道题是边权,所以要将边转化为点处理示例程序:#include<cstdio&g...原创 2018-02-12 12:21:39 · 439 阅读 · 0 评论 -
【LCT】BZOJ2843 极地旅行社
题面在这里直接LCT就好了示例程序:#include<cstdio>#include<algorithm>using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; return p1==p2&&(p2=(p1=buf)+fre...原创 2018-02-11 16:02:35 · 351 阅读 · 0 评论 -
【LCT】BZOJ2049 [Sdoi2008]Cave 洞穴勘测
题面在这里LCT模板题,没什么好说的判断是否联通只需要判断根是否相同即可暴力往上找根是可行的,因为树的均摊深度是lognlognlogn示例程序:#include<cstdio>#include<algorithm>using namespace std;inline char nc(){ static char buf[100000],*...原创 2018-02-11 14:19:39 · 278 阅读 · 0 评论 -
【LCT】BZOJ2002 [Hnoi2010]Bounce 弹飞绵羊
题面在这里LCT模板题,支持join,cutjoin,cut\text {join,cut}操作即可示例程序:#include<cstdio>#include<algorithm>using namespace std;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; re...原创 2018-02-10 14:40:51 · 372 阅读 · 0 评论 -
【斜率优化DP】BZOJ4518 [Sdoi2016]征途
题面在这里把m2m^2乘进去,答案其实就是m∑a2i−S2nm\sum a_i^2-S_n^2其中aia_i是第i天走的路程那么就是一个最显然的平方和模型,直接斜率优化DP示例程序:#include#include#include#define cl(x,y) memset(x,y,sizeof(x))using namespace std;typedef long原创 2018-01-04 20:53:29 · 527 阅读 · 0 评论 -
【拓扑】BZOJ4010 [HNOI2015]菜肴制作
题面在这里首先要明确,题意不等价于求最小字典序例如:n=4,3→1,2→4n=4,3\rightarrow 1,2\rightarrow 4此时应输出31243124因为题目要求的是在保证1…i1\dots i先完成的情况下,再考虑i+1i+1所以求反图的最大拓扑字典序即可示例程序:原创 2018-01-04 18:48:51 · 550 阅读 · 0 评论 -
【组合数学】BZOJ3505 [Cqoi2014]数三角形
题面在这里首先会发现直接算很难算那么就考虑计算三点共线的方案吧由于两直角边分别为a,ba,b的三角形,斜边上整点数为gcd(a,b)+1gcd(a,b)+1然后中间点要共线就只有gcd(a,b)−1gcd(a,b)-1种可能然后把斜边遍历整个网格图(n−a+1)⋅(n−b+1)(n-a+1)\cdot(n-b+1)最后注意一下这个斜边是可以对称翻转的示例程序:原创 2018-01-02 18:43:31 · 680 阅读 · 0 评论 -
【二分+线段树】BZOJ4552 [Tjoi2016&Heoi2016]排序
题面在这里首先想到二分然后就可以把整个序列转化成01序列(0比mid小,1比mid大)这样排序的操作就可以用线段树区间覆盖来实现最后判断KK这个位置是0还是1,就完成了二分的验证竟然1A了,好高兴示例程序:原创 2017-12-26 20:33:34 · 542 阅读 · 0 评论 -
【贪心】BZOJ3668 [Noi2014]起床困难综合症
题面在这里按位贪心就好了示例程序:原创 2017-12-14 20:43:58 · 260 阅读 · 0 评论 -
【带限制最短路】BZOJ1922 [Sdoi2010]大陆争霸
题面在这里设摧毁x城市的时间为dst(x)dst(x),则有: dst(x)=max(Max{dst(y)},Max{dst(s)+ws,x})dst(x)=max(Max\{ dst(y) \},Max\{ dst(s)+w_{s,x} \}) 其中yy是保护xx的点,ss是连向xx的点那么就可以直接刷DijstraDijstra了注意为了使dst(y)dst(y)在dst(x)dst(x原创 2017-12-17 20:13:24 · 447 阅读 · 0 评论 -
【分数规划+DFS序上DP】BZOJ4753 [Jsoi2016]最佳团体
题面在这里这个题一看就要二分吧……然后可以用DP验证其实就是树上取最大和但是如果定义不好的话会被卡常……可以DFS序上DP,常数较小fi,jf_{i,j}表示DFS序上前i-1个点,取了j个的最大值然后fi,j→fi+1,j+1 (取i)f_{i,j} \rightarrow f_{i+1,j+1} \text{ } \tag {取i} fi,j→fout(i),j (不取i)f_原创 2017-12-24 19:25:28 · 632 阅读 · 0 评论 -
【水】BZOJ1121 [POI2008]激光发射器SZK
题面在这里由于从一个顶点出发,最后一定会到另一个顶点所以答案就是n2\frac n2 示例程序:原创 2017-12-26 18:11:05 · 406 阅读 · 0 评论 -
【DP】RQNOJ #107 Ural的鹰蛋实验
题面在这里实在不懂为什么如此经典的题目只能在这种SBOJ上做……显然可以这样DP:fi,jf_{i,j}表示有i个蛋,要判断j层楼的最少次数枚举在哪一层楼扔鸡蛋 fi,j=Min{Max{fi−1,k−1,fi,j−k}+1} (1≤k≤j)f_{i,j}=Min\{ Max\{f_{i-1,k-1},f_{i,j-k} \}+1 \}\ \ \ \ \ \ \ \ \ \le原创 2017-11-03 18:12:03 · 636 阅读 · 0 评论 -
【概率DP】51Nod 1398 等公交
题面在这里考虑fif_i表示用了i时间,用了任意辆车概率之和然后就好了示例程序:原创 2017-11-04 16:17:01 · 577 阅读 · 0 评论 -
【期望DP】HDU3853 LOOPS
题面在这里显然直接倒推就好了示例程序:原创 2017-11-08 21:46:22 · 263 阅读 · 0 评论 -
【期望DP】HDU4405 Aeroplane chess
题面在这里还是期望DP的老套路……从后往前DP,fif_i表示i到终点的期望值,然后XJB转移就好了还有题意貌似是能飞就必须飞?没讲清楚啊示例程序:原创 2017-11-09 20:17:24 · 275 阅读 · 0 评论 -
【欧拉筛+主席树】CodeChef PRMQ Chef and Prime Queries
题面在这里其实非常傻逼……一看就知道是主席树了吧……重点在如何快速对每个aia_i拆分质因子其实可以在欧拉筛的同时记录nxt[x]nxt[x]表示xx除以最小的质因子后得到的数(因为欧拉筛对每个合数仅标记一次)然后对aia_i分解质因子就是O(log ai)O(log\space a_i)的了所以总复杂度为O(nlogn⋅log ai)O(nlogn\cdot log\space a_i)勉强可以过原创 2017-10-28 15:42:27 · 547 阅读 · 0 评论 -
【思路题】AtCoder agc013_c Ants on a Circle
题面在这里如果是在一条直线上的就非常好做。直接把蚂蚁看作可以穿透,然后把所有距离排序就好了因为无论怎么爬,蚂蚁的相对位置是不会变的那么对于这题,只需要知道原来的第一个蚂蚁到了哪里就好了其实就是求穿过(L−1,0)(L-1,0)这条线的蚂蚁的个数这个就很好求了,直接搞示例程序:原创 2017-10-28 20:01:48 · 757 阅读 · 0 评论 -
【分数规划,最优比率生成树】POJ 2728 Desert King
题面在这里分数规划经典题目啊……考虑二分答案midmid则只需验证: ∑cost∑dist≤mid∑cost≤mid∗∑dist∑(costi−mid∗disti)\frac {\sum cost} {\sum dist}\le mid \\\sum cost\le mid*\sum dist \\\sum (cost_i-mid*dist_i) 然后就直接最小生成树了示例程序:原创 2017-10-29 17:22:17 · 678 阅读 · 0 评论 -
【二分+贪心】BZOJ1816 [Cqoi2010]扑克牌
题面在这里没什么好说的,直接二分答案就好了示例程序:原创 2017-12-03 14:12:44 · 355 阅读 · 0 评论 -
【二分+最大流】BZOJ1305 [CQOI2009]dance跳舞
题面在这里考虑把每个人拆成自己xix_i和不喜欢自己yiy_i如果ii喜欢jj,那么连边(xi,xj,1)(x_i,x_j,1),否则连边(yi,yj,1)(y_i,y_j,1)最多和讨厌的人跳K次舞,连边(xi,yi,k)(x_i,y_i,k)最后验证(S,xi,mid)(S,x_i,mid)是否满流即可示例程序:原创 2017-12-03 20:28:26 · 288 阅读 · 0 评论 -
【贪心+最小割】BZOJ2521 [Shoi2010]最小生成树
题面在这里考虑把图分成含A和含B的两个联通块中间用给定的那条边联系那么所有比他小的边都要进行操作(一次操作等价于给一条边权值+1)那么其实就是最小割了示例程序:原创 2017-12-03 21:25:25 · 281 阅读 · 0 评论 -
【lucas定理】BZOJ4403 序列统计
题面在这里首先元素大小在[L,R][L,R]等价于[1,R−L+1][1,R-L+1]那么长度为i,元素大小[1,M][1,M]的非降序列方案数为CM−1i+M−1C_{i+M-1}^{M-1}所以答案就是: ∑i=1NCM−1i+M−1=(∑i=1NCM−1i+M−1)+CMM−1=(∑i=2NCM−1i+M−1)+CMM+1−1=(∑i=3NCM−1i+M−1)+CMM+2−1…=CMN+M−原创 2017-12-05 19:38:11 · 302 阅读 · 0 评论 -
【lucas定理】BZOJ2982 combination
题面在这里不说了,直接lucas示例程序:原创 2017-12-05 19:57:12 · 208 阅读 · 0 评论 -
【递推+lucas定理】BZOJ2111 [ZJOI2010]Perm 排列计数
题面在这里可以发现,此数列恰好满足堆性质可以把它看做小根堆的数组储存形式然后就可以愉快的DP了: fi=Csize lsonsize ifi∗2fi∗2+1f_i=C_{size\ i}^{size\ lson} f_{i*2}f_{i*2+1} 注意当n>pn>p时,可能不存在(n!)−1 (mod p)(n!)^{-1}\ \ \ (mod\ p)所以lucas定理就可以了示例程序原创 2017-12-05 21:13:32 · 792 阅读 · 0 评论 -
【欧拉函数】BZOJ2705 [SDOI2012]Longge的问题
题面在这里考虑如下: ∑i=1n(i,n)=∑d|nd∑id≤n[(id,n)=d]=∑d|nd∑i=1nd[(i,nd)=1]=∑d|nd⋅φ(nd)\sum_{i=1}^n (i,n) \\=\sum_{d|n}d\sum_{id\le n} [(id,n)=d] \\=\sum_{d|n}d\sum_{i=1}^{\frac n d} [(i,\frac n d)=1] \\=原创 2017-12-10 19:08:29 · 283 阅读 · 0 评论 -
【李超线段树】BZOJ3165 [Heoi2013]Segment
题面在这里李超线段树的裸题,不解释示例程序:原创 2017-12-12 21:23:17 · 392 阅读 · 0 评论 -
【二分+莫比乌斯函数】BZOJ2440 [中山市选2011]完全平方数
题面在这里显然需要二分……问题转化为求[1,⌊n√⌋][1,\lfloor \sqrt n \rfloor ]中无平方因子数的个数根据容斥原理,显然答案为n−奇数个质数乘积的平方倍数+偶数个质数乘积的平方倍数n-奇数个质数乘积的平方倍数+偶数个质数乘积的平方倍数如果枚举这个乘积i,根据莫比乌斯函数的定义,答案为: ∑i=1⌊n√⌋μ(i)⋅⌊ni2⌋\sum_{i=1}^{\big\lfloor原创 2017-11-26 11:18:27 · 859 阅读 · 0 评论 -
【容斥+莫比乌斯反演】BZOJ2301 [HAOI2011]Problem b
题面在这里首先容斥,把问题转化为求 ∑i=1n∑j=1m[gcd(i,j)=k]⇒∑i=1⌊nk⌋∑j=1⌊mk⌋[gcd(i,j)=1]\sum _{i=1}^n \sum _{j=1}^m [gcd(i,j)=k] \\\Rightarrow \sum _{i=1}^{\lfloor \frac n k \rfloor} \sum _{j=1}^{\lfloor \frac m k \r原创 2017-11-26 19:49:47 · 447 阅读 · 0 评论 -
【莫比乌斯反演】51Nod 1678 lyk与gcd
题面在这里一开始不会做,在Lynstery大佬的点拨下秒懂了……首先推柿子: ∑j=1n[gcd(i,j)=1]aj⇒∑j=1naj∑d|(i,j)μ(d)⇒∑d|iμ(d)∑d|jaj\sum_{j=1}^n[gcd(i,j)=1]a_j \\\Rightarrow \sum_{j=1}^n a_j \sum_{d|(i,j)} \mu(d) \\\Rightarrow \sum_{d原创 2017-11-28 20:18:23 · 804 阅读 · 0 评论 -
【莫比乌斯反演】BZOJ1101 [POI2007]Zap
题面在这里没什么好说的,反演裸题示例程序:原创 2017-11-28 20:45:46 · 819 阅读 · 0 评论 -
【莫比乌斯反演】BZOJ2818 Gcd
题面在这里反演裸题不解释示例程序:原创 2017-11-30 20:07:58 · 927 阅读 · 0 评论 -
【持续更新】莫比乌斯反演简明教程
前言开始学省选算法了……感觉莫比乌斯反演好厉害的样子,就先学习一下一入反演深似海……相关的东西太多了,以后会不定期更新前置技能莫比乌斯函数莫比乌斯函数μ(n)\mu(n)的定义如下:设n=pk11⋅pk22…pkmmn=p_1^{k_1}\cdot p_2^{k_2} \dots p_m^{k_m} μ(n)=⎧⎩⎨1(−1)m0n=1∏mi=1ki=1otherwise(ki>1)\begin原创 2017-11-30 21:09:53 · 2917 阅读 · 0 评论 -
NOIP2017滚粗记
Day 1一早就到了学校,和大家一起嘻嘻哈哈的但是心里总有点发慌……一进考场,就迅速敲好了板子,坐等密码8:30后,开始看题三题都过了一遍后心里很虚:T1不是一眼题,T2是个比较麻烦的模拟感觉要写炸,T3什么鬼啊是DAG上DP吗然后就杠T1一开始以为是exgcd,想了很久发现是错的然后整个人就方了,因为之前以为NOIP不会考很难的数论的,就没有复习……越方越坚信这是一道数论题……后来只剩2个小时了,原创 2017-11-11 17:46:23 · 3560 阅读 · 1 评论 -
【二分+最小生成树】BZOJ2654 tree
题面在这里其实非常简单:发现恰有need条边很难控制,但是边的优先级很好控制所以考虑给每个白色边加上某个权值使得求最小生成树时刚好取了need条边然后发现这个加上的权值与白色边的条数刚好满足单调所以直接二分加上的权值就好了示例程序:原创 2017-11-02 20:25:25 · 627 阅读 · 0 评论 -
【单调队列】BZOJ 1047 [HAOI2007]理想的正方形
题面在这里很显然可以使用单调队列。先只考虑正方形的行限制,处理出每个位置的最大/小值然后对最大/小值再刷一次单调队列,得到含有列限制的答案示例程序:原创 2017-11-02 21:38:51 · 765 阅读 · 0 评论 -
【莫比乌斯反演】BZOJ2820 YY的GCD
题面在这里与这道题类似。先考虑枚举质数p,答案就是: ∑p∑dμ(d)⌊npd⌋⌊mpd⌋\sum_p \sum_d \mu(d) \lfloor \frac n {pd} \rfloor \lfloor \frac m {pd} \rfloor 设T=pdT=pd,考虑枚举TT,则有: ∑Tmin{n,m}⌊nT⌋⌊mT⌋∑p|Tμ(Tp)\sum_T^{min\{ n,m \}} \原创 2017-11-26 20:57:21 · 504 阅读 · 0 评论 -
边双联通分量小结+模板
为什么我之前都没学过……预备知识桥:如果去掉,图的联通块个数会增加的边DFS树:将一个图DFS遍历所得到的树非树边:不在DFS树上的边显然非树边只会存在于DFS树的点与祖先之间非树边不可能是桥边双联通分量:任意两点通过【不经过同一边】的路径可达的子图桥有了以上姿势,就可以找到一张无向图的所有桥了记录in[x]in[x]为x入栈的时间戳,low[x]low[x]为x可达的所有点中最小的in显然,DFS原创 2017-10-28 07:55:31 · 1662 阅读 · 0 评论 -
【边双联通分量】hihoCoder#1184 连通性二·边的双连通分量
题面在这里其实就是边双的裸题示例程序:原创 2017-10-27 21:14:49 · 742 阅读 · 0 评论 -
【状压DP】UOJ#265 【NOIP2016】愤怒的小鸟
题面在这里其实就是一个简单的状压DP如果你直接O(2n⋅n3)O(2^n\cdot n^3)暴搞肯定是不行的那么就预处理一下gi,jg_{i,j}表示经过i,j两头猪的抛物线经过的猪然后……就好了示例程序:原创 2017-10-25 20:39:32 · 955 阅读 · 0 评论