01 2019 档案
摘要:"传送门" 很容易想到,离线按路径长度从大到小排个序,用树链剖分加颗支持区间cover的线段树就好了 代码: c++ include include include using namespace std; void read(int &x){ char ch; bool ok; for(ok=0,
阅读全文
摘要:"传送门" 最小圆覆盖的板子题,和 "bzoj1336" 一样,双倍经验题 代码:
阅读全文
摘要:"传送门" 期望$O(n)$的神奇算法 代码: 或者也可以选择put("nan");
阅读全文
摘要:"传送门" 这个题我改了好久呢。(最终居然是挂在常识上,我的算法完全没写错) 算是计算几何的第一步啦 这个题很容易想到四边形的四个点在凸包上,但是暴力枚举复杂度依然感人 可以考虑先枚举对角线,那么另外两个点就满足单峰,可以用三分优化,据说这样写卡卡常能过 然后发现枚举对角线的过程中,另外两个点也是跟
阅读全文
摘要:第一问求最多,不需要区分数学作业和信息作业,直接模拟就行了 第二问考虑每天只能产生1的贡献,每天拆成两个点,限制每天只能有1的贡献,剩下的源点连数学作业,信息作业连汇点,再将数学作业和信息作业连能连的天数。 跑一边最大流就行了 代码: c++ include include include incl
阅读全文
摘要:2019.1.24 数据范围:$n include include include using namespace std; void read(int &x) { char ch; bool ok; for(ok=0,ch=getchar(); !isdigit(ch); ch=getchar()
阅读全文
摘要:"传送门" 这个题是我晚自习的时候看到的,那个时候觉得这个题好简单啊,一上手才发现这个题好难写啊,调了好久都没调对 算法是分块!! 很显然众数不能直接合并,那么我们可以考虑每个块上记录这个块的众数。 对于每个询问,它可能包含多个块,由于众数不好合并,所以我们需要记录任意两个块之间的众数,这个直接循环
阅读全文
摘要:"传送门" sb题啦,暴力重建树就好了,学习黄学长的每加一定次数的点就重建一次树,这样就可以过了 代码:
阅读全文
摘要:"传送门" 仙人掌最短路,圆方树! 先dfs找环,顺带求出环的长度len,记录每个点到环内深度最小的点的最短路径有没有经过返祖边 对于每个环建一个方点,都是圆方树的基本操作啦! 求答案时对于$dist(x,y)$,先求出$z=lca(x,y)$,然后判断$z$是否是方点 1、z是方点,那么x和y的最
阅读全文
摘要:"传送门" 这个题有多种解法,如虚树,分治,线段树合并,平衡树启发式合并,dsu on tree 我采用了dsu on tree和线段树合并来解决这个题目 很显然能看出这个题和维护子树信息有关 dsu on tree相信大家都知道是一种处理子树信息的优秀算法,利用轻重链剖分的优秀性质, 我们可以爆搜
阅读全文
摘要:"传送门" 这个题我实在不知道怎么办了,到现在依然没能在bzojAC,本机测试速度还可以,复杂度似乎也没问题,希望有大佬能指出一下错误! 问题已解决,加个剪枝就好了(果然kd tree还是离不开剪枝啊)! 我的思路大概是对于每个数记录它的上一次出现的位置$pre_i$,当前位置$i$,下次出现位置$
阅读全文
摘要:"传送门" 这个题首先可以考虑一个点也算作一个联通块 去掉所有的边那么答案即为$2^m n$ 然后发现每加上一条边就会使联通块的数量减1,这部分是$ 2^{m 1} m$ 但是这是一个仙人掌图,在环上这样做是错的 简单分析可以发现环上这样做会导致多减,加回来就可以了,这部分是$2^{m len}$(
阅读全文
摘要:"传送门" 上面是题目意思哦! (友情提供一组样例) sample input 7 17 21 24 36 14 19 27 20 21 50 18 5 33 7 4 20 3 50 2 99 5 10 2 output 45 71 95 0 这个题首先将水平排序,然后按照水平建线段树。(只是建颗线
阅读全文
摘要:"传送门" 这个题有点意思啊,我可能kd tree的板子写的有点问题,查询的时候就是要暴力查左右儿子,记录的最大最小值毫无作用,不清楚为什么。 这个题也算是比较简单的啦,由于是子树操作,只要想到按dfs序建树就没有什么问题了 其他的也就是一个区间覆盖,没有什么难度 代码: c++ include i
阅读全文
摘要:"传送门" 这个出题人啊,真是想问候他全家! 不得了啊,模数是合数,诶,挺正常的! 没错挺正常的! 这个题算是思路比较简单的kd tree了,打标记也和线段树差不多。 设$a_i$是标号为$i$的权值,$p_i$为标号为$i$的标识符 然后转化为二维平面上的点$(i,p_i)$,然后上kd tree
阅读全文
摘要:"传送门" 虽然是远古时期的ctsc,但是果然还是ctsc啊 前置芝士:树状数组 这个题最开始的思路很好想,由于之前写过一个类似处理的题,所以这个题我一开始就想到了思路。 首先,我们可以尝试讲图腾表示为xxxx的形式 那么闪电就是:1324;高山是:1243和1432 ans=1324 1243 1
阅读全文
摘要:"传送门" 查询历史版本,回到历史版本,这个题目显然是用主席树,好像就没了! 但是这里的修改是区间修改,众所周知主席树的空间复杂度是$nlog(n)$的,区间修改会导致主席树的开点到达一个相当恐怖的数量(具体是因为传标记会导致新开许多节点),空间复杂度最坏可以被炸成$O(n^2)$。 记得以前学过的
阅读全文
摘要:"传送门" 乍看像是树剖,但是树剖的话就不能用权值线段树,不能权值线段树求区间第k小就只能树套树,诶静态的当然主席树啦!! 树剖也不需要了诶,好像只需要dfs建主席树就好了,这样建出来的主席树$rt[i]$,所包含的就是根到$i$节点路径上的点,对于查询$(x,y)$就可以差分解决了; 也就是查询$
阅读全文
摘要:"传送门" 好像还是挺简单的啊,主席树套一套就好了。 本来算错时间复杂度了,以为过不了,去翻题解,发现讲的都是玄学东西,后面终于发现了自己的想法没什么问题,但是还是写不出。 写完后因为5个字节的事情,debug了2小时,真是服了,晚饭也没吃! 时间倒是好解决,差分一下直接查询前缀和就完了,所以首先考
阅读全文
摘要:"传送门" 这个题比起 "[POI2007]ZAP Queries " 固定了左端点,我们可以把它画成一个二维的平面 那么$$ans=solve((1,b),(1,d)) solve((1,b),(1,c 1)) solve((1,a 1),(1,d))+solve((1,a 1),(1,c 1))
阅读全文
摘要:"传送门" 好题啊,由于每个点既可以进,也可以出,就可以新建一个源点和汇点,对于每个点都连边,然后就是最小流板子了。 代码: c++ include include include include using namespace std; void read(int &x) { char ch; b
阅读全文
摘要:"传送门" 思维题吧,神奇的模型转化,除了模型转化别的都是板子 最最最暴力的想法当然是一个一个去求lca啊,然后恭喜你获得了0分的好成绩 其实可以考虑另一种暴力,dep(lca(i,z))也可以看做是i点和z点到根节点路径上公共的路径的长度,那么我们就可以得到一个做法,将z到根的路径上每个节点都加上
阅读全文
摘要:"传送门" 提示:如果你想看懂我接下来说的话,你需要对网络流有一定的理解。 我们现在已经会有源汇上下界最大流了,上下界一类问题的建模已经会了。那么如何解决最小流的问题。 最小流一定是0吗:因为有下界的存在,最小流就不一定是0. 参考有源汇上下界最大流的做法,我们同样可以建一个超级源点和超级汇点,连一
阅读全文
摘要:"传送门" 有源汇上下界最大流,建模很经典,将每行和每列看做一个点,然后去按照有源汇上下界建图就行了,因为这个题,我又发现了自己网络流板子里的一个错误写法,bfs的时候得增广完再退出,改了我半个小时。。。 c++ include include include include include usi
阅读全文
摘要:"传送门" 和上一题差不多,每行和每列分别看做一个点,障碍点坐标的行和列就不建边,再按照有源汇上下界建图就好了,唯一的区别就是这个题求的是最小流 这个题的数据好水呢,建错图也能A呢 c++ include include include include using namespace std; de
阅读全文
摘要:"传送门" 这里详(jian)细(dan)解释一下最小费用最大流。 最大流会不会? 会! 最短路会不会? 会! 那你不就会这个题怎么写了。。。 算了,最小费用最大流是要求在最小费用的前提下求最大流,那么我们显然要优先考虑最小费用吗,想想我们求最大流的过程。 我们就可以将费用定成边权,将bfs求增广路
阅读全文
摘要:"传送门" 最小费用最大流,又是一道思维题,我又没想出建图,问题想对了,就是不会解决,建图大概就是对于每个工人每个时间段建个点,只要想到将$n$个工人分成$(n m)$个点,剩下的就简单了,zkw费用流在这题表现不佳 c++ include include include using namespa
阅读全文
摘要:"传送门" 最小费用最大流,被我秒了的水题,由于每个点也只能经过一次,所以拆点处理就好了,zkw费用流又被EK踩了。。。 c++ include include include using namespace std; inline void read(int &x) { char ch; bool
阅读全文
摘要:"传送门" 最小费用最大流,这个题是修车的加强版,暴力建图是60分,所以这个题需要动态加边,动态加边的思路很显然,最先只把厨师做第一道菜加边,之后每做完一道菜再加$n$条边就好啦,此题有及其恶(稀)心(疏)的图,zkw费用流会被卡成80分,所以只能写EK c++ include include in
阅读全文
摘要:"传送门" 最小费用最大流,这么垃圾的题我想的居然挂了,正解就差一点点,我就假装自己秒了这个题吧,思路就是先跑一边最大流,然后在原图的残量网络中加一些边,就是对于原本的每条边$(x,y)$连一条容量为inf,费用为$cost_{(x,y)}$的边,最后多建一个超级源点,向原源点连一条容量为k,费用为
阅读全文
摘要:"传送门" 最小费用最大流,这个就真的是水题了,我看错题了,建了一个比正解复杂好几倍的图。。。我以为每个月有多个产品,还以为仓库可以无限时的存产品。。。然后建出来的图就巨复杂。。。 c++ include include include include using namespace std; de
阅读全文
摘要:"传送门" 最小割,这也是个经典题了,当初学最小割时没学会,这次算是理解了,首先二分图染色,将整个图分成黑色点和白色点,由于相邻的格子不能同时选,一个黑点一定对应四个白点,也就是我们只能选择这个黑点或者四个白点,就再建出一个超级源点和超级汇点,将每个黑点与超级源点连边,容量为点权,每个白点与汇点连边
阅读全文
摘要:"传送门" 最小割,最大权闭合子图,基本建图方法就是正权点与源点连边,负权点与汇点连边,中间容量都是inf就好了,对于这个题的利益,我们可以将所有的边变成点,然后就建成了一个二分图,之后就好解决了 c++ include include include include using namespace
阅读全文
摘要:"传送门" 最小割,一眼最小割,这个甚至不需要建什么模型,直接按它给的建就好了,最小割=最大流,跑个最大流就行了,注意:图是无向图 c++ include include include include using namespace std; define min(a,b) (aq; void r
阅读全文
摘要:"传送门" 这是个最大费用最大流,拆点连边就好啦,最大费用最大流 c++ include include include include using namespace std; void read(int &x) { char ch; bool ok; for(ok=0,ch=getchar();
阅读全文
摘要:"传送门" 一道建模稍微有难度的网络流,首先你需要考虑到拆点,确实有点难度,你需要把一天拆成干净餐巾和肮脏餐巾,因为脏餐巾是可以转化为干净餐巾的,你需要做到这个过程,所以你需要拆点,其次难想到的应该是如何解决快洗部和慢洗部每次只能洗一件并且需要洗多天,如何安排哪天的餐巾去洗就是个问题,所以可以考虑每
阅读全文
摘要:"[POI2007]ZAP Queries" 题意简述:对于给定的整数a,b和d,有多少正整数对x,y,满足x include include using namespace std; void read(int &x) { char ch; bool ok; for(ok=0,ch=getchar
阅读全文
摘要:1、 "[国家集训队]Crash的数字表格" (这是第一道,感觉难度不太像入门啊) 2、 "[POI2007]ZAP Queries" (这题比较入门, "题解" ) 3、 "[HAOI2011]Problem b" (差不多是上个题的加强版, "题解" ) 4、 "YY的GCD" 5、 "SDOI
阅读全文