自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Icefox的博客

生活不止眼前的苟且,还有诗和远方。

原创 poj2318 TOYS(计算几何)

那些年不想写的计算几何,总有一天要还。 直接枚举点,枚举四边形即可,只要用叉乘判断点是否在两条线段中间即可。 O(nm)O(nm)O(nm) #include <cstdio> #include <cstring> #include <iostream> #in...

2019-06-28 17:23:38 57 0

原创 bzoj1791 [Ioi2008]Island 岛屿(求基环树直径,单调队列)

给定一个基环树森林,求每一棵基环树的直径,他们的和就是答案。 基环树的直径:先找到环,然后直径只有可能是 1.环上某一个点的子树的直径 2.环上某两个点之间的距离加上他们各自子树中最深的点的深度。 然后搜一搜就好了,情况2可以单调队列一下。 O(n)O(n)O(n) 我写的太丑了,bzoj跑不过去...

2019-06-28 11:52:22 59 0

原创 bzoj5100 [POI2018]Plan metra(树+构造)

构造题,细节较多。 第一次WA:没有判1-n的链上如果d[1][i]相同的话是不合法的。 第二次WA:没有判1-n距离为0的情况是不合法的。 #include <bits/stdc++.h> using namespace std; #define ll long long #defi...

2019-06-24 17:34:49 74 0

原创 bzoj4289 PA2012 Tax(优化建图+Dijkstra)

首先我们考虑把无向图变成有向图,然后化边为点,新图中两点之间距离为边权的max,然后新建源点S向1的出边化成的点连边,边权为出边边权,新建汇点T,n的入边化成的点向T连边,边权为入边边权。然后S到T的最短路就是答案。这样最坏是O(m2)O(m^2)O(m2)的边。 考虑优化建图:因为max(a,b...

2019-06-24 16:22:44 48 0

原创 bzoj1098 [POI2007]办公楼biu(图论+list)

给出补图,求原图的连通块个数及大小。 我们直接bfs原图,每次把补图中的边(也就是原图完全图中被删掉的边)通向的点打上标记,这样没被标记的点就是与此点连通的,都在一个连通块内,用链表优化一下,支持O(1)O(1)O(1)插入删除。 每个点在链表中只会被删一次,所以这部分复杂度是O(n)O(n)O(...

2019-06-22 14:21:54 155 0

原创 Codeforces Round #568 (Div. 2)

老年选手水平退化严重,花样WA题。 A.Ropewalkers 贪心 #include <bits/stdc++.h> using namespace std; #define ll long long #define inf 0x3f3f3f3f #define N 500010 i...

2019-06-20 22:46:29 88 0

原创 退役记。

终于…还是退役了吧。 拖了很久却写不出那退役记。 真的很想把这一年的经历都记下来,怕自己日后忘记,却遗憾自己没有西酱那样的文笔。 简单说来,从去年的noip爆炸开始,大概就已经奠定了这结局。只是真的两手空空,没有一点点的降分回来了,还是让自己有些不敢相信。 省选之后,感觉自己突然不知道该喜...

2018-07-28 20:08:48 1047 1

原创 uoj217【UNR #1】奇怪的线段树(优化建图+最小流)

官方题解:http://c-sunshine.blog.uoj.ac/blog/1860 首先你需要发现只要覆盖了“自己是黑色节点,且子树内没有其他黑色节点了的点”即可。然后你每次覆盖的一定是一段连续的右儿子+一段连续的左儿子。而且这样是一一对应的。然后我们可以对每个点往可能的后继连边,这样就得...

2018-07-15 22:14:37 325 0

原创 uoj207 共价大爷游长沙(lct+Hash)

考虑我们给S中的每条路径一个权值,然后对这段路径异或上这个值。 那么最后询问的那条边如果权值等于S集合的异或和那么就说它被所有路径经过了。这样的正确性是很高的。 然后考虑新加入一条边,就会出现一个环,然后肯定是在这个环上删去一条边,假设是x,y那么在新的树上x-&gt;y的路径上异或上...

2018-07-15 20:02:35 224 0

原创 bzoj3600 没有人的算术(替罪羊树动态标号+线段树)

最大值线段树维护即可。 问题就是一个动态标号。 可以用重量平衡树–替罪羊树来做。 复杂度O(mlogn+mlogm)O(mlogn+mlogm)O(mlogn+mlogm) #include &lt;bits/stdc++.h&gt; using namespace std...

2018-07-14 21:31:05 183 0

原创 bzoj4372 烁烁的游戏(点分治+线段树)

无限CE…一丝丝怀疑人生qaq 考虑点分树维护这个东西。每个节点x开一颗线段树,每个叶子节点i记录距离x距离为i的点加了多少。每次修改/询问在点分树上跳父亲就好了。然后还要容斥一下多加的部分,因此需要每个点再开一颗线段树表示到fa[x]距离为i的要减掉多少。 可以吧前缀加单点询问变成单点加后缀...

2018-07-14 18:26:36 1478 0

原创 bzoj4558 [JLoi2016]方(容斥原理,计数,Hash)

这容斥真是写的我心态爆炸… 考虑用至少0个坏点的-至少1个坏点的+至少两个坏点的-至少三个坏点的+至少四个坏点的。 我们发现对于斜着的正方形,可以直接在框住它的大正方形处计数,边长为i的大正方形内就有i个正方形。 且我们发现每个点出现且仅出现在一个正方形上。因此对于至少一个坏点的正方形,我们...

2018-07-13 23:27:23 162 0

原创 bzoj4003 [JLOI2015]城池攻占(左偏树)

左偏树就是满足堆性质,且满足左子树深度不小于右子树深度的二叉树。 这样右子树深度是O(logn)O(logn)O(logn)的。 可以用来做可合并堆。 复杂度O(nlogn)O(nlogn)O(nlogn) 此题就是裸题啦,维护一个乘法标记和加法标记即可。因为乘的是一个正数,因此大小关系不...

2018-07-13 21:21:51 198 0

原创 bzoj3083 遥远的国度(树链剖分+换根)

树链剖分基本操作,换根其实就是把dfs序列分裂,倍增找一下当前rt到询问点x的儿子,把这一段区间去掉即可。 #include &lt;bits/stdc++.h&gt; using namespace std; #define ll long long #define inf 0...

2018-07-13 20:09:12 176 0

原创 【UNR #3】Day1

A(70) #include &amp;lt;bits/stdc++.h&amp;gt; using namespace std; #define ll long long #define inf 0x3f3f3f3f #define N 200010 inline char g...

2018-07-13 16:31:01 159 0

原创 CF547D Mike and Fish(欧拉图)

考虑行列建点,每个点变成边。 如果是欧拉图,那么每个点的入边=出边,考虑每一个行点,把入边都染成r,出边都染成b那么就一样多了。 但是有可能一开始不是个欧拉图,我们可以对度数为奇数的点两两配对(一定有偶数个),然后就一定是个欧拉图了。跑无向图输出欧拉回路即可。 复杂度O(n)O(n)O(n)...

2018-07-12 14:41:02 567 0

原创 CF367E Sereja and Intervals(dp,计数)

因为不能包含,所以一定没有相同的区间,我们可以先不考虑顺序,求出可能的方案数,然后乘上n!就是答案。 我们考虑按1~m的顺序枚举每一个数,由于不能包含,所以一个数上最多一个左区间和最多一个右区间,我们直接枚举这4种情况即可。因此f[i][j][k]f[i][j][k]f[i][j][k],表示考...

2018-07-12 14:05:40 266 0

原创 CF453E Little Pony and Lord Tirek(线段树+二分)

考虑如果一个区间在同一时刻被清过零,怎么做。 我们可以把这个区间中的点按生成满能量的时间从小到大排序,然后用生长了的时间去二分。一定是前面一段都是满能量,可以前缀和算,后面一段也可以r的后缀和×生长时间算。 我们线段树维护一下这个东西。 如果区间内有未清过零的点打标记-2. 如果一个区间被...

2018-07-09 22:38:30 224 0

原创 bzoj4850 [Jsoi2016]灯塔(决策单调性)

同bzoj2216 #include &lt;bits/stdc++.h&gt; using namespace std; #define ll long long #define inf 0x3f3f3f3f #define N 500010 inline char gc(){...

2018-07-07 21:59:11 478 0

原创 Codeforces Round#495

A #include &amp;lt;bits/stdc++.h&amp;gt; using namespace std; #define ll long long #define inf 0x3f3f3f3f #define N 100010 inline char gc(...

2018-07-06 23:57:01 106 0

原创 bzoj4061 [Cerc2012]Farm and factory(贪心+Dijkstra+切比雪夫距离)

记新首都为x点,我们对于每一个原来的点u都需要满足 dis[u][x]+dis[x][1]&gt;=dis0[u][1],dis[u][x]+dis[x][2]&gt;=dis0[u][2]dis[u][x]+dis[x][1]&gt;=dis0[u][1],dis[u]...

2018-07-05 23:40:55 233 0

原创 bzoj1563 [NOI2009]诗人小G(dp+决策单调性+二分)

首先有很显然的O(n2)O(n2)O(n^2)dp f[i]=min{f[j]+|s[i]−s[j]+i−j−1−L|p}f[i]=min{f[j]+|s[i]−s[j]+i−j−1−L|p}f[i]=min\{f[j]+|s[i]-s[j]+i-j-1-L|^p\} 30分。 然后考虑p=...

2018-07-03 21:29:57 174 0

原创 bzoj3163 [Heoi2013]Eden的新背包问题(分治+背包dp)

每次询问去掉物品i之后,j的钱最多可以买多大价值的东西。 我们可以分治[l,r]表示l~r的物品不买的背包数组。然后递归处理[l,mid]时把[mid+1,r]的物品转移进来,递归处理[mid+1,r]时把[l,mid]的物品转移进来。 转移的时候就是一个多重背包,可以单调队列优化。 复杂度...

2018-07-03 17:01:29 351 0

原创 bzoj1531 [POI2005]Bank notes(单调队列优化多重背包)

单调队列优化多重背包的板子。 我们朴素的多重背包做法是O(m∑c)O(m∑c)O(m\sum c)的 可以用二进制优化成O(m∑logc)O(m∑logc)O(m\sum logc) 更进一步的,我们可以用单调队列优化成O(nm)O(nm)O(nm) 考虑转移方程 f[j]=max{f[...

2018-07-03 16:40:08 450 0

原创 bzoj2726 [SDOI2012]任务安排(cdq分治+斜率优化)

我们显然有n^2 dp f[i]=min{f[j]+(S+t[i]−t[j])∗w[j]}f[i]=min{f[j]+(S+t[i]−t[j])∗w[j]}f[i]=min\{f[j]+(S+t[i]-t[j])*w[j]\} 其中t[i]=∑j=1iT[i],w[i]=∑j=i+1nF[j]...

2018-07-03 12:30:11 187 0

原创 bzoj2739 最远点(凸包+决策单调性+分治)

给定一个凸包,询问每个点距离最远的点的标号。 我们按逆时针考虑每一个点i,距离i最远的点j也是在逆时针转的。 因此我们可以把这个凸包拆成链,(把点再复制一次),每个点i合法的点的区间为[i,i+n]。其余点到i的距离为-inf。这样我们就有决策单调性了,随着i的增大j也是单增的。因此我们可以直...

2018-07-02 23:05:53 372 0

原创 bzoj2216 [Poi2011]Lightning Conductor(决策单调性+分治/二分+单调栈)

化简一下就是求ans[i]=max{aj+|i−j|−−−−−√}−a[i]ans[i]=max{aj+|i−j|}−a[i]ans[i]=max\{a_j+\sqrt{|i-j|}\}-a[i] 我们把绝对值去掉,正着倒着各做一遍即可。 现在只考虑&amp;lt;i&amp;...

2018-07-02 21:56:10 343 0

原创 bzoj2300 [HAOI2011]防线修建(动态维护凸包)

把操作离线,倒着做,这样就是加点维护凸包了。 可以用set维护一下当前凸包上的点 然后每次新加一个点时判断是在凸包内还是凸包外 如果在凸包外,就要重新维护上凸壳,往两边删点,直到再次构成凸壳。 O(nlogn)O(nlogn)O(nlogn) #include &lt;bits/...

2018-07-01 22:37:43 157 0

原创 bzoj4946 [Noi2017]蔬菜(模拟费用流,贪心,线段树)

首先我们有一个费用流的做法。 因为保质期这个东西不太好限制,我们把每种蔬菜都按照过期时间分成若干类,每类大概x个,这样就相当于我们有了n*p种蔬菜。每种蔬菜在指定时间过期。我们把S的奖励放到每一种蔬菜过期时间最晚的那一类中去。 我们可以建图,S向每一天i连边,容量为m,费用为0,每一天i向所有...

2018-06-29 22:28:40 669 0

原创 bzoj4944 [Noi2017]泳池(dp,概率与期望)

首先把求最大面积恰为K的概率转化成 求最大面积&amp;amp;lt;=K的概率-最大面积&amp;amp;lt;=K-1的概率 我们注意到最底层一定是选了若干段&amp;amp;lt;=K的连续段,于是我们可以枚举连续段的长度来dp。 我们考虑f[i][j]f[i]...

2018-06-28 22:20:52 159 0

原创 bzoj4943 [Noi2017]蚯蚓(Hash+复杂度分析卡常)

做法较为明显,直接模拟即可。Hash比较字符串。 复杂度分析一波,如果没有2操作的话,复杂度显然是O(nk)O(nk)O(nk)的,考虑有2操作的话,分裂两个蚯蚓的复杂度是O(k2)O(k2)O(k^2),因此而带来的合并复杂度也是O(ck2)O(ck2)O(ck^2)的,因此总的复杂度就是O(...

2018-06-28 15:27:52 122 0

原创 bzoj4650 [Noi2016]优秀的拆分(计数+SA)

好久没写SA了的赶脚qaq 考试时写了95分的O(n2)O(n2)O(n^2)暴力hash 我们考虑枚举中间分割点i,以i结尾的AA串个数*以i+1开头的AA串个数就是对答案的贡献。 于是我们只需要处理出f[i],以i结尾的AA串个数 g[i],以i开头的AA串个数这两个数组。 我们考虑枚...

2018-06-27 23:07:09 85 0

原创 bzoj4742 [Usaco2016 Dec]Team Building(dp)

把所有牛一起降序排序,权值相同的FP的在前。 然后直接dp就好了,f[i][j][k],考虑前i头牛,FJ已经选了j头,FP已经选了k头的方案数,要求k&lt;=j #include &lt;bits/stdc++.h&gt; using namespace std;...

2018-06-27 20:18:53 93 0

原创 bzoj1670 [Usaco2006 Oct]Building the Moat(凸包)

求凸包裸题。用的是Graham扫描法求凸包。 a×b&gt;0a×b&gt;0a\times b>0 说明向量b在向量a的逆时针方向上。 我们一开始极角排序就是要把这些点与点1的连线逆时针排序。 然后按顺序处理这些点,维护一个栈,使得相邻点之间的线段都是逆时针转的。这样...

2018-06-26 21:14:38 90 0

原创 CF392E Deleting Substrings(区间dp)

题意就是说给你一个序列a,你每次可以选择一段“山峰形”子串删掉,获得v[长度]的价值,价值可能为负。可以不全删掉,求最大价值。 f[i][j] 把i~j都删掉的最大价值 g[i][j] 把i~j删成a[i],a[i]+1,…,a[j]的形式的最大价值 h[i][j] 把i~j删成a[i],a...

2018-06-26 19:46:41 310 0

原创 bzoj4198 [Noi2015]荷马史诗(Huffman编码+stl)

题目给出的定义显然就是让我们求Huffman编码。 不过可能是K叉的,我们加几个0补全就好了。 为了满足第二个要求,贪心的权值相同时深度小的优先。 #include &lt;bits/stdc++.h&gt; using namespace std; #define ll l...

2018-06-26 14:20:31 98 0

原创 bzoj4199 [Noi2015]品酒大会(SAM+线段树)

这回换了个SAM写,SA的做法见:portal 一开始以为可以做到线性…结果写了之后发现还是要挂棵线段树… 我们考虑对反串建SAM,搞出后缀树,这样任意两个后缀的lca就是他们的lcp。于是我们可以在每个lca处统计答案。 不过一个点可能会覆盖一段长度区间,所以要区间修改答案。 复杂度O(...

2018-06-26 14:16:27 138 0

原创 bzoj4184 shallot(线段树时间分治+线性基)

我们按时间建线段树,把所有数的存在时间求出来,一定是一个连续的区间,插到线段树对应区间上。线段树每个节点挂一个vector来存数。这样就把删除操作避免掉了。然后从上到下dfs一遍线段树,把每个叶子的线性基合并出来即可,复杂度O(nlognlogw)O(nlognlogw)O(nlognlogw) ...

2018-06-25 21:33:11 139 0

原创 CF607B Zuma(区间dp)

给定一个序列,每次操作可以选择一个回文子串删掉,问把整个序列删除所需的最小操作次数。我们区间dp,f[i][j]表示把i~j都删掉的最小花费 转移有两种: 1、i,j没有在一次被删掉,f[i][j]=f[i][k]+f[k+1][j] 2、a[i]==a[j],i,j在一次被删掉,那么在删i...

2018-06-25 20:48:49 199 0

原创 CF346B Lucky Common Subsequence(LCS+kmp)

给定三个串A,B,C,求串A,B的lcs,要求不能包含C串作为子串。 f[i][j][k]表示A串前i个,B串前j个,lcs匹配到了C串的第K的个字母的lcs 转移和普通的lcs差不多,就是在往lcs上多加一个字符时,需要求一下新的lcs匹配到了C的那个字符,我们kmp预处理一下next数组即...

2018-06-25 20:33:50 252 0

提示
确定要删除当前文章?
取消 删除