- 博客(152)
- 收藏
- 关注
原创 [JSOI2016]独特的树叶 树Hash
[JSOI2016]那么我们考虑一下用异或+子树大小的方式结合Hash的进制规则来做。 设计Hash函数为H[x]=\xor H[y]*p+size[y] 那么我们只要先求出以某个点为根时的Hash值,然后在递推到每一个点为根的情况即可(换根树形DP),这个直接用异或的性质异或回去抵消即可。 unsigned long long不影响异或Code#include<bi...
2019-03-12 18:49:26 208
原创 [BJOI2015]树的同构
[BJOI2015]判断两棵无根树是否同构 树Hash的原理就是不要让节点编号去影响Hash值 那么我们考虑一下用子树大小结合Hash的进制规则来做#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define ull unsigned long longusing names...
2019-03-12 18:44:42 293
原创 [SP3267]DQUERY - D-query 主席树
[SP3267]就是区间内本质不同数的计数的在线做法 每个颜色x记录一个last[x]表示改颜色上一次出现的位置,每次把last[x]的位置-1,x现在的位置+1,保证本质不同的数贡献为1 每次修改两条链,需要建一个辅助根节点#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#de...
2019-03-12 07:43:03 169
原创 [51nod1616]最小集合
[51nod1616]ai并不大,所以我们可以正着考虑每个数是否在这个集合中必须出现#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define per(i,a,b) for(int i=(a);i>=(b);i--)using namespace std;...
2019-03-12 07:31:32 276
原创 [TOEFL] tarjan+拓扑排序+bitset优化
n<=30000,m<=60000Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define per(i,a,b) for(int i=(a);i>=(b);i--)using namespace std;const int N=3e4+100;...
2019-03-11 19:58:14 257
原创 [51nod1742]开心的小Q 数论分块
[51nod1742]Solution #include<bits/stdc++.h>#define rep(i,a,b) for(ll i=(a);i<=(b);i++)#define ll long longusing namespace std;const ll N=1e5;ll v[N],cnt,l,r;ll sum(ll x,ll n){ l...
2019-03-11 19:54:12 179
原创 [BZOJ5319]军训列队 主席树+二分
[BZOJ5319]显然对于一个询问,我们应该将被询问的人以及询问的位置排序后一一匹配 也就是排序后求 \sum=|Ai−Bi| 由于人的位置互不相同,所以A数组是递增的,而B数组是连续的一段整数,因此Ai与Bi的大小关系只有可能由小于到大于变化一次 对原序列建立主席树,询问时在对应区间上二分出大小关系变化的位置,前后用区间和计算答案即可 时间复杂度O((n+m)logk)Cod...
2019-03-11 19:45:11 136
原创 [ZROI620]con 后缀自动机
[ZROI620]n,Q<=5000 打死我也不写后缀数组#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define per(i,a,b) for(int i=(a);i>=(b);i--) #define ll long longusing namespa...
2019-03-11 07:09:29 204
原创 [ZROI159]取石子游戏 动态规划
70pts 就是求在一段序列中取出若干个数(不能全取完且取出的个数必须是d的倍数),使剩下的xor和为0的方案数 f[i][k][w]表示现在到了第i个数,取出的数的个数%d==k,没取出来的数xor和为0时方案数 答案就是f[n][0][0]-(n%d==0) (不能全取完) 对于另外20%的数据,发现所有数的本质不同的xor和最多有2^5个,预处理出来本质不同的xor和,在...
2019-03-06 20:05:15 1093
原创 [ZROI160]路径计数 DP+广义容斥
50pts f[s][t][d][x]表示从s点出发走到x路径长度为d且不经过s和t的方案数#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)using namespace std;const int N=101;struct node{int y,n;}e[N*N];...
2019-03-06 16:57:41 172
原创 错排问题
错排问题:有多少个长度为n的排列满足对于所有的1&amp;amp;amp;lt;=i&amp;amp;amp;lt;=n1&amp;amp;amp;lt;=i&amp;amp;amp;lt;=n1&amp;amp;lt;=i&amp;amp;lt;=n,i!=aii!=a_{i}i!=ai递推式f[1]=0,f[2]=f[0]=1f[1]=0,f[2]=f[0]=1f[1]=0,f[2]=f[0
2019-03-06 11:49:51 171
原创 [ZROI138]赛尔号 欧拉回路
欧拉回路中的点入度都等于出度,所以我们可以在图中构造一条欧拉回路 考虑到图中度数为奇数的点有偶数个,所以我们把两两度数为奇数的点连一条边,这样所有点的度数都是偶数了 答案就是度数为偶数的点的个数,跑一遍欧拉回路即可 因为奇数点之间的连边不影响偶数点,而欧拉回路保证所有点入度等于出度,所以原图中的偶数点都符合条件 注意图可能不连通Code#include<bits/st...
2019-03-06 11:26:22 481
原创 容斥原理两则
这两个套路都是把恰好....转化成了至少.....,最后根据容斥原理递推出恰好的值[SDOI2009]Bill的挑战f[i]表示至少与i个字符串匹配的方案数 ans[i]表示只与i个字符串匹配的方案数Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);++i)#define...
2019-03-05 20:13:57 175
原创 [SDOI2009]晨跑 费用流
[SDOI2009]BZOJ题面谁写的,出来挨打 费用流垃圾套路题,拆点即可#include<bits/stdc++.h>#define rep(i,a,b) for(ll i=(a);i<=(b);i++)#define per(i,a,b) for(ll i=(a);i>=(b);i--)#define st(x) x#define ed(x) x...
2019-03-05 15:22:32 174
原创 [SDOI2009]HH去散步 动态规划+矩阵乘法优化
[SDOI2009]就是求从S到T有多少条长度为t的路径,满足当前走过的路不能是上一次走过的40pts无脑爆搜?#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)using namespace std;const int mod=45989;const int N=1e5;...
2019-03-04 20:13:52 212
原创 [TJOI2015]弦论 后缀自动机+贪心
[TJOI2015]考虑后缀自动机每个节点的意义以及endpos 从后往前考虑从该点出发能到达几个子串 最后在后缀自动机上贪心输出即可#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define per(i,a,b) for(int i=(a);i>=(b);i--)u...
2019-03-03 20:06:01 135
原创 [FZOJ190] 网络流+二分答案
[FZOJ190]难点在建图 建分层图,拆点,从一层走到另一层代表当前走的路径长度增加了1 二分答案,代表最短路最大是多少 从起点开始求一个最小割 把属于最小割的边ban掉,就相当于选中了这个点,及花费增加1,只有这样才能使最短路增加1 画个图感性理解一下 思路太神仙了,这题就当板子用吧#include<bits/stdc++.h>#define rep(i,...
2019-02-28 19:22:44 340 1
原创 [BZOJ3261]最大异或和 可持久化tire树
[BZOJ3261]tire树相关 由于可能出现查询越界的情况,所以开始时要把初始数组整体向右移动一位Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);++i)#define per(i,a,b) for(int i=(a);i>=(b);--i)using namesp...
2019-02-27 17:56:41 283
原创 省选校内模拟D10
T1给出一个序列,你需要支持修改一个数以及查询是否存在一个数x使得所有数异或上x后按从小到大排列,有则输出最小的 n,m≤10^6,所有数字不超过2^30Solution考虑相邻两个数第一个不相同的二进制位 这些不同的二进制位唯一确定了x的取值,如果没有冲突就合法Code#include<bits/stdc++.h>#define rep(i,a,b) for(...
2019-02-26 17:48:55 253
原创 [POJ 3017] 单调队列优化DP
[POJ 3017]Problem给定一个长度为N的序列A,要求把该序列分成若干段,在满足每段中所有数值和不超过M的前提下,让每段中所有数的最大值之和最小。 N<=10^5,M<=10^11,0<=Ai<=10^6Solution很容易写出状态转移方程 F[i]= min { F[j] + max(Ak) } (j+1<=k<=i) ...
2019-02-24 21:28:29 234
原创 省选校内模拟D8
T1 题目看了半天 数据结构学傻 树状数组可以干的事写了个主席树 主席树还和动态开点线段树写混了 最后交的比较慌,没检查空间,成功爆零 改过以后由于常数巨大喜提75分考场代码75pts#include<bits/stdc++.h>#define rep(i,a,b) for(ll i=(a);i<=(b);++i)#define...
2019-02-23 18:25:06 170
原创 [九省联考2018]一双木棋chess 记忆化搜索
Problem任意一个时刻的状态是阶梯型的 记忆化搜索即可 注意设置边界 查找的话使用 std::tr1::unordered_map<int,int>会快很多,注意加上 #include<tr1/unordered_map>Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a)...
2019-02-23 17:17:21 190
原创 和平委员会 2-SAT
Problem如果a1和b1不能同时出现 就连一条边a1->b0&b1->a0 暴力寻找合法解即可Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)using namespace std;const int N=2e5;struct node{i...
2019-02-22 21:41:28 269
原创 动态逆序对 BIT套线段树
动态逆序对Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define ll long longusing namespace std;const int N=4e5;const int M=3e7+100;int root[M],sum[M],pos[N],lc...
2019-02-22 14:08:13 173
原创 省选校内模拟D6
T1 Solutionbitset优化套路 bitset赋值类似数组 bitset相关关于分块 用时间换空间 把n个点分成若干个块 每次只考虑当前块内的点到达所有点的情况Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)using names...
2019-02-21 17:37:27 245
原创 [HAOI2018]苹果树 组合数学
[HAOI2018]基础组合数学Code#include<bits/stdc++.h>#define rep(i,a,b) for(ll i=(a);i<=(b);i++)#define ll long longusing namespace std;const ll N=4e3;ll fact[N],dp[N][N],c[N][N],n,mod,ans=0...
2019-02-18 07:49:10 215
原创 [ZROI553] NTT+组合数
[ZROI553] 把G反过来原式就变成这样对于确定的i,贡献都会卷到第n+r项,直接NTTCode#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define ll long longusing namespace std;const int mod=...
2019-02-17 16:00:24 391
原创 [BZOJ2179] NTT快速傅立叶&高精度乘法
「BZOJ2179」Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define ll long longusing namespace std;const int mod=479*(1<<21)+1; const int N = 131100;cha...
2019-02-17 15:48:32 752
原创 [BZOJ 3262陌上花开] CDQ分治
[BZOJ 3262]一个区间的答案是左右两个子区间单独的答案加左右两个子区间之间产生的新贡献,所以就可以分治了 先按第一维排序 分别在每个分治的子区间里按第二维排序,类似归并排序 第三维用树状数组维护即可Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)using ...
2019-02-17 09:44:37 272
原创 [SP10707 COT2] 树上莫队
[SP10707 COT2]算法原理懒癌晚期懒得写了Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define per(i,a,b) for(int i=(a);i>=(b);i--)using namespace std;const int N=4e5;...
2019-02-16 15:56:58 188
原创 省选校内模拟D4
tot=30+0+10=40T1脑筋急转弯 每一轮有些数会向左移动一格 答案就是max{i-a[i]}T3Solution把上面的式子拆开变成 F[i]=max{F[j]+Tj*A/D}-Ti*A/D+Bi-A F[i]=max{F[j]+Tj*A/D}-Ti*A/D+Bi 由于把向上取整拆开了 所以Tj的余数不同状态转移方程也不同 根据余数分类,...
2019-02-15 21:50:46 170
原创 [HAOI2018]奇怪的背包
[HAOI2018]设当前选取的物品序列为{V1,V2,V3,...,Vn} 则可以凑出W的条件是gcd{V1,V2,V3,...,Vn,P} | W 这样就可以DP了 设f[ i ][ j ]表示考虑了前 i 个物品,当前选取的物品与P的gcd为 j 的方案数 离散化后f[ i ][ j ]可转化成当前选取的物品与P的gcd是P的第 j 个因子的方案数Code#includ...
2019-02-15 21:38:05 213
原创 Prufer序列与树的计数
Prufer序列Prufer数列是有标号无根树的一种数列,点数为n的树转化来的Prufer数列长度为n-2。 对于一棵确定的有标号无根树,对应着唯一确定的prufer序列。构造方法有标号无根树转化为Prufer序列找到编号最小的度数为1的点。 删除该节点并在序列中添加与该节点相连的节点的编号。 重复1,21,2操作,直到整棵树只剩下两个节点如下图的prufer序列为3,5...
2019-02-15 07:47:36 731
原创 [BZOJ4241] 回滚莫队
[BZOJ4241]给出n个数,每次询问区间[L,R]内每个数*该数出现次数的最大值 使用回滚莫队 回滚莫队用来维护不可撤销信息比如最大值 在同一个块内右端点递增左端点每次移动到该块的最右边再插入元素 当查询的左端点在一个块内时右端点移动O(n),总共有sqrt(n)个块,总时间复杂度为O(n*sqrt(n)) 左端点每查询一次最多是O(sqrt(n))的时间复杂度,总时间复杂度为O...
2019-02-14 21:27:27 223
原创 [BZOJ2120] 带修改莫队
[BZOJ2120]查询区间内不同数个数,带修改 O(n^1.666)Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define per(i,a,b) for(int i=(a);i>=(b);i--)using namespace std;const i...
2019-02-14 18:26:55 211
原创 省选校内模拟D2
tot:60+10+30=100T1Solution Code60pts:分块打表#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define ll long longusing namespace std;int n,d[10000000];ll ...
2019-02-13 18:53:37 313
原创 [BZOJ2906] 分块
[BZOJ2906]预处理出锅zbl 预处理f[i][j][k],g[i][j][k]分别表示第i块到第j块 k的出现次数和小于等于k的数的出现次数的平方和 查询的时候加上块外数的贡献即可 小trick:计算出每块的起始位置和终止位置 计算分块的大小时不要用除法,否则会RECode#include<bits/stdc++.h>#define rep(i,...
2019-02-13 16:36:10 240
原创 省选校内模拟D1
tot:100+10+0=110scp基金会已介入调查T1 有一棵树,每个节点有一些机器人,管理员在一号节点,树上有一节点k为控制室,现在管理员要从1号结点出发去控制室,同时机器人会向管理员移动,机器人和管理员速度相同,求对于每个k(k属于[1,n]),管理员能与几个机器人相遇。 就是对于管理员路径上的每个点x,求从x开始bfs能到达且与x最短距离小于等于deep[x]的点。 30分...
2019-02-12 21:29:30 234
原创 [BZOJ3165]线段树标记永久化
[BZOJ3165]Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define pdd pair<double,double>#define se second#define fi firstusing namespace std;const int...
2019-02-10 15:06:30 287
原创 [BZOJ2724] 分块
[BZOJ2724]求区间众数 分块+预处理Code#include<bits/stdc++.h>#define rep(i,a,b) for(int i=(a);i<=(b);i++)#define per(i,a,b) for(int i=(a);i>=(b);i--)using namespace std;const int N=5e4+10;...
2019-02-07 11:09:35 143
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人