自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(34)
  • 收藏
  • 关注

原创 CF592D Super M

我们可以发现只有一条路径能只走一次,(就是从出生地到最后遍历的那个点的路径)而其他的路径都需要走两次。所以我们让这条 “只走一次的路径” 为直径即可使得行走总长度最小。那么出生地即为树的直径的标号最小的端点。#include <bits/stdc++.h>using namespace std;const int N=2e5+5;int n,k,u,v,p,ans,ans1...

2020-03-27 23:48:12 151

原创 CF467D Fedor and Essay

由于某些字符,会我转为你,你转为他,他转为我,形成一个环,所以先缩点后得到一个DAG森林。对于森林里的每棵树,做一次取最大值的dp即可。#include <bits/stdc++.h>#define int long longusing namespace std;const int N=6e5+5;int n,m,tot,ans1,ans2,id[N],dp1[N],dp...

2020-03-27 23:42:56 122

原创 [TJOI2013]松鼠聚会

模拟一下样例,发现是切比雪夫距离。根据神奇的公式,把切比雪夫距离点阵中的(x,y)转为(x+y,x-y),即是曼哈顿距离点阵了。转为曼哈顿距离后,可以通过前后缀预处理的方案实现O(n)取min。#include <bits/stdc++.h>using namespace std;const int N=1e5+5;int n;double a,b,ans=1e30;d...

2020-03-26 21:10:46 122

原创 CF580E Kefa and Watch

线段树维护哈希值。预处理一个数组,val[i][j]表示:全是i,长为j的哈希值。#include <bits/stdc++.h>#define int long longusing namespace std;const int N=1e5+5,base=131,MOD=1e9+7;int n,m,k,q;int a[N],sum[N<<2],tag[N&l...

2020-03-26 21:04:48 119

原创 CF515E Drazil and Park

化简一下公式:2h[a]+2h[b]+dis(a,b)=2h[a]+2h[b]+d[b]-d[a-1](d数组是一个距离前缀和)对于我们要求的一个区间,需要找的就是max((2h[b]+d[b])+(2h[a]-d[a-1]))而对于这个max,需要再维护一个最大左前缀和一个最大右后缀是不是和gss1很像#include <bits/stdc++.h>#define int ...

2020-03-26 21:03:22 135 1

原创 CF413E Maze 2D

对于一个区间,即2*len的一个矩阵,保存以下4个最小值:1.左上到右上的最短距离;2.左上到右下的最短距离;3.左下到右上的最短距离;4.左下到右下的最短距离。线段树维护即可。#include <bits/stdc++.h>using namespace std;const int N=2e5+5,inf=1e8;int n,q;char str[3][N];s...

2020-03-26 20:57:14 128 1

原创 CF786B Legacy

暴力建图m次,最多会出现nm条边。发现建图是对一个连续的区间进行操作,所以给每个区间一个新的编号,将一个区间看成是一个点来建图,即可做到“假的m条边”。而对于某些大的区间来说,由于可能询问的小的区间,所以我们需要在区间与区间之间再次连边,而区间内连边的最大条数为logn,m次则是mlogn。这个优化过程就是线段树优化建图。#include <bits/stdc++.h>#def...

2020-03-26 20:52:16 122

原创 [POI2006]PAL-Palindromes

结论题:a,b是两个回文串,如果把他们连接在一起仍得到回文串,需要a,b的最小循环节相同。求最小循环节,然后用map存储即可。设字符串总长度为n,时间复杂度为O(n+log(n))。#include <bits/stdc++.h>#define int unsigned long longusing namespace std;const int N=2e6+5,base=...

2020-03-19 11:34:45 171

原创 BZOJ 2795:[POI2012]OKR-A Horrible Poem

题意:询问次数有200万次,每次询问的长度有50万,需要求出询问的区间的最小循环节。给出性质1:对于一个区间的循环节来说,设区间为[l,r],循环节长度为len,那么可得:[l,r-len]=[l+len,r] (我们用哈希可以做到O(1)实现)现在我们已经有了快速判断是否是循环节的方法了,然后我们需要找出一个快速枚举循环节的方法。不难想到,枚举一个区间的全部因数,这样的复杂度为O(sqr...

2020-03-19 11:11:40 212 2

原创 CF613D Kingdom and its Cities

重点在树形dp。dp[u]:u为根的子树的答案最小值对于有些只有一个重要节点的子树,可以暂时保留这个节点 ,等到不得已必须处理时再处理,可以使得答案更优所以再记录一个g[u]:u为根的子树,当答案最小时,还剩下没处理好的节点个数#include <bits/stdc++.h>using namespace std;const int N=1e5+5;int n,u,v,q...

2020-03-19 10:35:57 114 1

原创 BZOJ 3611:Heoi2014 大工程

原来最长链用的都是两边dfs求直径或用两个数组存最长链和次长链,今天学习了,如果只需要求出直径大小,别的什么都不用,那么只用一个数组进行dp更加方便。void DP(int u){ //f2[u]:最短链 f3[u]:最长链 if (vis[u]) f1[u]=1,f2[u]=0,f3[u]=0; else f1[u]=0,f2[u]=1e18,f3[u]=-1e18; for ...

2020-03-19 10:34:03 149

原创 BZOJ 2286:Sdoi2011消耗战

也是新学虚树,所以只能简单介绍下。想必大家都知道离散化,虚树可以理解为树上的离散化,这样处理,对于一些询问次数比较多,原树比较大的题,我们就可以尝试建立出虚树,并在虚树上进行操作。而虚树作为一个工具,一般会和树形dp或树上贪心结合在一起。很幸运看了yyb的博客后,发现了很简便的建虚树的方法,此题建好虚树后,一个基础树形dp即可。#include <bits/stdc++.h>...

2020-03-19 10:28:53 125

原创 BZOJ 4698: Sdoi2008 Sandy的卡片

一直在想要不要把这篇题解删掉是上面那题的加强版,数据范围变大了,题目要求也稍微改动了一下。其实我们只要把原数组变成一个差量数组,同时在哈希的时候,避免负数就好了。时间复杂度:O(log2(m) nm log2(nm))#include <bits/stdc++.h>#define int unsigned long longusing namespace std;cons...

2020-03-18 15:58:49 91

原创 BZOJ 2946: [Poi2000]公共串

这里选择的是自然溢出hash。很明显,答案是具有单调性的,所以可以二分枚举答案。一篇很好的题解#include <bits/stdc++.h>#define int unsigned long longusing namespace std;const int N=2e3+5,base=131;int n,l,r,mid,ans;int len[6],hash[6][N...

2020-03-18 14:58:49 108

原创 洛谷 P1987 摇钱树

思考:有很多同学问为什么最后要在1-k中扫一遍,他们认为,f[j]表示的是选j棵树的最大值,那么既然增产值不会为负,就算为0,f[k]也一定是并列最优的。但是这样做的话,实际上对拍n=10的数据15秒就被卡了。由于f[j]的转移过程,是倒序转移的,这个相信大家都懂为什么要倒序转移,所以f[k]并不一定是最大值啊。好像说了这话没说一样…#include <bits/stdc++.h&g...

2020-03-18 13:10:17 193 1

原创 POJ3537 Crosses and Crosses

记忆化搜索处理Multi-SG函数。#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>#include <vector>#include <queue>#include <string>#include &...

2020-03-16 14:14:32 158 2

原创 POJ1740 A New Stone Game

首先隔空15年orz一波教主。自认为此题的是本蒟蒻做过的博弈题中,除了定理以外,解法及证法最巧妙的一道。题意:对于n堆石子,每堆若干个,两人轮流操作,每次操作分两步,第一步从某堆中去掉至少一个,第二步(可省略)把该堆剩余石子的一部分分给其它的某些堆。最后谁无子可取即输。对于所有的情况,从小到大排序后,都可以归纳为下面3类:#include <iostream>#inclu...

2020-03-16 13:44:17 129

原创 POJ3710 Christmas Game

树上删边游戏 (需要加上对于特殊环的处理)#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>#include <vector>#include <queue>#include <string>#includ...

2020-03-16 13:36:22 146

原创 树上阶梯nim

题面在某个不知名的行星上蕴含着大量冰晶矿,Jim和他的好兄弟Swan自然不能放过这个赚钱的好机会。Jim在整个星球上开掘树型矿洞,每个矿坑之间都有矿道相连。Jim和Swan在每个矿坑开采了大量的矿石,现在他们面临一个新的问题,怎么把所有的矿石运出去。已知,矿坑与矿坑之间形成了有向的树形结构,即除0号矿坑以外每个矿坑都有与其相连的父亲矿坑。Jim总共开采了 个矿坑并将其从0到 n-1 编号 ,每...

2020-03-16 11:51:37 488

原创 POJ2608 Nim && POJ2960 S-Nim

记忆化搜索处理sg函数。#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>#include <vector>#include <queue>#include <string>#include <cst...

2020-03-16 00:13:36 100

原创 逆Nim游戏(SJ定理)

相信大家都会Nim游戏: 给出n堆石子,两人轮流取,取光者获胜,问先手是否有必胜策略。如果改一下,变成取光者失败,问先手是否有必胜策略。那么就是逆Nim游戏,即SJ(定理)。给出例题:POJ3480对于所有的情况,都可以归纳为下面3类:1.每堆石子均为1。(显然,若n为奇数,则先手必败,n为偶数,则先手必胜)2.只有1堆石子大于1,n-1堆石子为1。(那么,当n-1为偶数时,先手则可...

2020-03-15 23:55:13 248

原创 树的直径

求树的直径:#include <bits/stdc++.h>using namespace std;const int N=3e5+5;int n,m,u,v,ans,p,cnt;int d[N],head[N];struct edge{int next,to;}e[N<<1];inline void add(int u,int v){ cnt++; ...

2020-03-14 13:25:07 146 1

原创 CF463D Gargari and Permutations

题意:给你k个长度为n的排列,求这些排列的最长公共子序列的长度。n<=1000,2<=k<=5。记得之前做过O(n^2)的求两个排列或两个序列的最长公共子序列的长度,现在有5个排列,是n的5次方吗?观察一下它们之间的拓扑关系。如果任意两个数,在所有排列中的相对位置均相同,则可以由前一个点向后一个点连一条边,然后在DAG上跑dp即可。#include <bits/...

2020-03-13 16:16:25 105

原创 CF796E Exam Cheating

#include <bits/stdc++.h>using namespace std;int n,p,k,x,now,ans,pp;int a[1005],b[1005];int main(){ scanf("%d%d%d",&n,&p,&k); scanf("%d",&x); while (x--) scanf("%d",&now...

2020-03-11 02:36:38 257 1

原创 BZOJ 2588: Count on a tree

加个dfs序就可以把静态kth移到树上来做。树上差分一下即可。顺便再多写一个dfs用以树剖求lca。#include <bits/stdc++.h>using namespace std;const int N=1e5+5;int n,q,m,u,v,t,LCA,cnt,last;int ll[N<<5],rr[N<<5],sum[N<<...

2020-03-10 21:29:14 116

原创 BZOJ 3524:[POI2014]KUR-Couriers

很裸的板子题。就当把模板打得熟练点罢了。#include <bits/stdc++.h>using namespace std;const int N=5e5+5;int n,q,m,x,y,t,cnt;int a[N],b[N],ll[N<<5],rr[N<<5],sum[N<<5],T[N<<5];int build(...

2020-03-09 18:13:13 108

原创 洛谷 P3834 可持久化线段树 2(主席树)

因为太菜了,所以也不知道这题的算法到底应该叫做什么,看hzw博客中把这题归到主席树了,那我也归到主席树里吧。其实我连主席树定义都不知道…#include <bits/stdc++.h>using namespace std;const int N=2e5+5;int n,q,m,x,y,t,cnt;int a[N],b[N],ll[N<<5],rr[N<&...

2020-03-09 18:10:10 97

原创 CF269B Greenhouse Effect

简化题意:给出一个序列,每次可以移动一个数到任意一个位置,问最少多少次能使得序列非降。一开始看了洛谷是黄题以后写了这个傻逼代码:#include <bits/stdc++.h>using namespace std;const int N=5e3+5;int n,m,ans;int a[N],minn[N];double x;int main(){ scanf("%d...

2020-03-09 01:59:52 177

原创 洛谷 P4597 序列sequence

此题的强化版#include <bits/stdc++.h>#define int long longusing namespace std;int n,x,ans;priority_queue<int>q;/*题解们都说:考虑当前的数x和之前的最大数y(默认x<y,因为如果x>=y已经满足非降了)为了让它非降,我们要做区间[x,y]里找到一个数...

2020-03-09 01:59:03 303 2

原创 CF479E Riding in a Lift

挺明显的一道前缀和优化dp简单题,但是由于比较菜,写了45分钟才写完,所以记录一下。分为a<b和a>b两种情况进行dp。#include <bits/stdc++.h>using namespace std;const int N=5e3+5,MOD=1e9+7;int n,a,b,m,ans;int f[N],sum[N],g[N];int main(){...

2020-03-08 22:56:16 157 1

原创 BZOJ 4006: [JLOI2015]管道连接

最小斯坦纳树森林可以这样理解题意:在一幅n个点,m条双向边的图中,有k个关键点,每个关键点有一个颜色。现在要求将一些边连起来,使得任意一种颜色的所有关键点相连。连接每条边的花费已给出,问最小花费为多少。分析:显然,此时的答案是由大于等于1棵最小斯坦纳树组成的最小斯坦纳树森林,答案<=一棵最小斯坦纳树的答案。设f[i][p]表示:当前位置为i,连接的关键点的位置为p的最小花费。(这一部...

2020-03-08 21:07:32 102

原创 最小斯坦纳树

之前把斯坦纳树的题目放在状压dp里,现在觉得还是应该新建一个专题。毕竟斯坦纳树的dp转移自成一套,和其他的状压dp转移有很大区别。#include <bits/stdc++.h>using namespace std;const int N=105,M=505,K=10;int n,m,k,u,v,w,x,max_statue,inf;int f[N][1<<K]...

2020-03-08 20:52:34 255

原创 #10051. 「一本通 2.3 例 3」Nikitosh 和异或

运用和例2相同的求法。#include <bits/stdc++.h>using namespace std;const int N=4e5+5,L=30;int tot,trie[N*L][2],cnt[N*L];int n,ans;int a[N],sum[N],l[N],r[N];inline void add(int now,int rt){ for (re...

2020-03-05 21:32:25 207

原创 #10049. 「一本通 2.3 例 1」Phone List

trie树简单题。需要注意一下数组范围,以及建树查找的顺序,以实现代码简洁明了。#include <iostream>#include <cstdio>#include <algorithm>#include <cmath>#include <vector>#include <queue>#include &l...

2020-03-05 19:30:24 149

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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