自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 HDU6003(Problem Buyer 求出最小的k使得在n个区间里任选k个都包含m这个大小 优先队列)

题目题意: 给你n个区间代表难度 m个问题的难度。问你至少选择多少个区间才可以保证:每个问题都有它对应的难度区间 而且多个问题不能对应一个区间。思路: 对于问题1有a个区间不包括这个难度,要想满足这个问题就必须选a+1个区间。所以求出m个问题对应的m个 ai+1 取最大的就是本题的k.所以本题转化为求出所有的a。用一个优先队列即可求出,注意一个区间只对应一个问题。。。所以上述描述不严谨...

2019-09-30 18:28:59 249

原创 HDU6000(Wash 优先队列 贪心)

题目题意: L件衣服, n 个洗衣机, m 个烘干机, 给定每台洗衣机洗衣服的时间和每台烘干机烘干的时间, 每台机器一个时间段只能处理一件衣服。求洗完L件衣服的最短时间(每件衣服都一样)?题解:先用优先队列求出L件每件衣服的洗好花费的时间(包括等待)再用优先队列求出L件每件衣服的烘干花费的时间(包括等待)a b c d e f ga’ b’ c’ d’ e’ f’ g’转化成...

2019-09-30 17:29:41 181

原创 HDU6006(2016CCPC-Final H Engineer Assignment 状压dp)

题意: n(n<=10)个工程 m(<=10)个工程师。每个工程需要一些技术(技术个数<=3) 一个工程师精通一些技术(技术个数<=2) 。一个工程师只能去一个工程干活,一个工程师可以担任一个工程里的多个技术。问最多多少个工程可以开工。技术种类数<=100。思路: dp[i][S]: 前 i 个工程,S表示1-m个工程师选与不选的状态。dp[i][S]=max(d...

2019-09-30 13:26:40 180

原创 P2704(炮兵阵地 状压dp)

题目#include<cstdio>#include<iostream>#include<algorithm>using namespace std;const int N=100+5,M=60+5;char s[12];int e[N];int A[M],tot,num[M],sta[N][M],dp[3][M][M];inline int ...

2019-09-30 12:13:59 301

原创 CF797E(Array Queries 预处理和询问分工配合 好题)

题目#include<cstdio>#include<algorithm>const int N=1e5+2,M=318;using namespace std;int a[N],dp[N][M];int main(){ int n,q,K;scanf("%d",&n),K=sqrt(n); for(int i=1;i<=n;+...

2019-09-24 10:25:13 118

原创 CF797F(Mice and Holes 单调队列优化dp)

题目肯定要所有老鼠的位置 和 所有洞的位置都排序。 这不是显然的嘛dp[i][j]:前j个老鼠进入第i个洞的最少花费。注意j要从0-n开始扫描!!!并不是1-n。dp[i][j]=min(dp[i][k]+sum[i][j]-sum[i][k]). (j-k<=cav[i].c&&k<=j) k也可以等于j,此时就是第i个洞没老鼠。这样就不需要对于每一个i就...

2019-09-24 10:17:41 272

原创 P4219 [BJOI2014]大融合 (lct维护子树信息模板)

题目// makeroot(x),access(y);// printf("%lld\n",(ll)(sz[x]+1)*(sz[y]+1));#include<cstdio>#include<iostream>#include<cstring>using namespace std;typedef long long ll;const...

2019-09-23 16:46:41 110

原创 P4234(最小差值生成树 lct维护生成树)

题目先把所有边按x从小到大排序。动态添边。x y 已经有一条路径 就把x y路径中最小的边去掉,换成这个边。 每次(num==n-1)时 更新答案 ans=min(ans,e[i].w-e[dex].w);dex是当前生成树中最小的边。注意是生成树上,不是路径上,lct搞不来的。while(!vis[dex]) ++dex; 想一想,这肯定是对的吧。每次假如的新边都是大边,所以最小边在加边...

2019-09-18 20:36:51 141

原创 P2387(魔法森林 lct动态维护最小生成树)

题目emmm我觉着有点迷。。先将m条边按a从小到大排序。最长边最小 这个路径在最小生成树上。1.还没构成一颗生成树时,u v已经有路径相连 但新边的y小于u v原来路径的最长边。一定要替换。这是毋庸置疑的,虽然新边的 x 变大了,但此时还没构成生成树,还要加入x更大的边。所以此时x大了也无所谓啊。2.此时已经构成了一颗生成树。其实下面的代码(在现有生成树的基础上换边 )就是把每一种可能作为...

2019-09-18 10:47:59 167

原创 P4172(水管局长 lct维护最小生成树)

题目A-B路径的最长边最小 这个路径一定在最小生成树上。可以离线做。删边不好做。看成倒序加边。先维护一个最小生成树。每次加边的时候 看这个边是否小于最小生成树的最长边,小于的话,将那个边删了,添加这条边。怎么记录答案呢。把边当成一个带权值的点。下面的代码只在洛谷过了 bzoj不能用map记录边的编号 先按x y(x优先)排序。然后在L[x],R[x]二分查找他的编号。我deubg了好久,还...

2019-09-17 22:30:05 120

原创 cogs 2701. 动态树(lct 维护子树信息(大小)模板)

题目#include<cstdio>#include<iostream>using namespace std;const int N=2e5+5;int f[N],ch[N][2],st[N],tag[N];int sum[N],sz[N];//sum:一个点在其所在splay中 左儿子的个数+右儿子的个数+所有的虚儿子的总信息+1(该节点)inline ...

2019-09-16 20:49:13 328

原创 bzoj4025(二分图 线段树分治+带权并查集模板)

题目这是线段树分治的模板把。。将每条边的存活时间放到时间线段树里。注意带权并查集。#include<cstdio>#include<algorithm>#include<vector>using namespace std;typedef pair<int,int>pii;const int N=1e5+5;struct Update...

2019-09-15 20:23:54 134

原创 bzoj4311(向量 线段树分治+每次重新构造凸壳三分更新答案)

题目和二分图不同的是:1. 没办法回退。。 2.就算回退了 也不能快速与其他修改连成关系,不同于并查集。因为要与之前的这个节点的修改 按横坐标排序 构造凸壳。就需要一段一段的被更新。先把每个向量存在的时间段插入到时间线段树中。然后答案的更新被分成好多部分更新。每到线段树一个节点,用这个节点存在的向量的构成上凸壳(可以画画图就是对的),然后这个节点对应时间段里的查询 在这个凸壳上三分更新答案。...

2019-09-15 20:15:38 140

原创 P4585(火星商店问题 线段树分治(将询问分到时间线段树里) 可持久化trie)

题目每次询问是有一个时间段[t1,t2]限制,将这个限制插入到线段树里。由于可持久化trie建树时,需要离散坐标,要先对所有修改按位置从小到大排序。这样左边修改的时间可能>mid,右边可以<=mid,就乱了,所以我们每次分治前将修改的时间<=mid的放在分治的左边。这个题是问的挑一个数与他异或最大 可以多次更新答案。(不像并查集+线段树分治那样,要这个时间之前的整个状态。)...

2019-09-14 18:30:03 104

原创 Distinctive Character(多源bfs)

题目题意: 给你n个长度都为k的01串(n<=1e5 k<=20) 让你输出一个长度为k的 与所有串最大相同值最小的 一个01串。这不就是求与所有串差异值最小最大的那个串。就可以多源多终点bfs了。因为是差异值最小,所以vis过可以弹出嘻嘻嘻。有一个差异值相当于多走了一步。这样队列里最多2^ k个串,不会爆的,只会入队这个操作进行2^k次,不会T的。#include<b...

2019-09-14 10:30:58 248

原创 P3605(Promotion Counting晋升者计数 线段树合并裸题)

题目#include<cstdio>#include<algorithm>using namespace std;const int N=1e5+5;struct tree{int l,r,sum;}t[N*60];int root[N],sz;struct Edge{int to,nex;}edge[N];int head[N],ttt;int a[N],...

2019-09-13 11:56:00 137

原创 bzoj2733(永无乡 支持其中的两个联通快合并 问某个联通快第k小 线段树合并模板)

题目代码在bzoj T了 洛谷A了。。妈的不知道为什么。线段树合并裸体。。#include<cstdio>using namespace std;const int N=3e5+5;struct tree{int l,r,sum;}t[N*70];int root[N],sz=0;void build(int &x,int l,int r,int val){ ...

2019-09-13 10:34:53 89

原创 bzoj2212(Tree Rotations 线段树合并模板)

题目一个树中逆序对的个数等于 左子树逆序对个数+右子树逆序对个数+左子树>右子树的对数。可以递归。关键就是怎么每次都处理 左子树>右子树的对树这一部分。假如左子树所有出现的权值可以在一颗权值线段树上体现出来,右子树的所有出现的权值可以在另一颗权值线段树上体现出来。那么这一部分就是要求treeA 比treeB大的对数也可以递归得到。记两颗权值线段树分别是treeA,treeB;分...

2019-09-12 22:04:17 153

原创 分治

cdq斜率优化 维护凸包: 每次cdq(l,r)时 将id<=mid的放左边 id>mid的放右边。 然后cdq(l,mid),每次cdq这个区间后 保证这个区间的X坐标递增。然后此时[l,mid]的X坐标递增 [mid+1,r]的斜率递增(看情况 反正单调) [l,mid]左部分用单调栈维护一个凸壳,[mid+1,r]右部分在那个凸壳上的最优决策点更新。然后cdq(mid+1,r) ...

2019-09-11 16:13:18 108

原创 trie模板

bzoj4260 Codechef REBXOR#include<cstdio>#include<cstring>#include<algorithm>#define m(a,b) memset(a,b,sizeof a)using namespace std;typedef long long ll;const int N=4e5+10,Maxb...

2019-09-10 19:47:42 90

原创 bzoj2115(Xor 有向图中1-n找一条异或最大的路径 找环)

题目思路: 其中一条到n路径 以及 贪心选取图上的环。#include<cstdio>#include<algorithm>using namespace std;typedef long long ll;const int N=5e4+5,M=1e5+5,Maxbit=63;struct Edge{int to;ll len;int nex;}edge[M...

2019-09-10 09:02:57 133

原创 bzoj1045(糖果传递 数学 中位数最优)

题目参考链接 画线部分不严谨#include<cstdio>#include<cmath>#include<algorithm>using namespace std;typedef long long ll;const int N=1e6+5;ll a[N],S[N];int main(){ int n;scanf("%d",&am...

2019-09-10 01:06:56 136

原创 bzoj1044(木棍分割 也算不上单调队列优化dp..)

题目显然第一问最大值最小化 二分最大值mx。第二问切割方式显然就是dp.dp[i][j]=sigma(dp[k][j-1]) (j-1<=k<i sum[i]-sum[k]<=mx)我就差一点点T了 T_T// Time:7792 ms Memory:2264 kb#include<cstdio>#include<algorithm...

2019-09-09 22:53:06 141

原创 bzoj2460(元素 任选任意个数 他们的id异或值不为0的物品使他们的val之和最大 线性基模板)

题目题意: n个物品有(id,val),任选几个使所选的物品的id异或值不为0的情况下 val之和最大。思路: 将n个物品按val从大到小排序,按顺序插入线性基,假如一个插完之后a[i].id==0说明这个id可以被之前已选择的表示出来,和已选择的异或值则为0。这些一堆数中少选一个就没事了,所以肯定不选val小的。 还有一点就是代码显性表示的不被之前的所有的表示出来。前面所有的中不合法的几个...

2019-09-09 18:54:05 152

原创 HDU3949(XOR n个数任选几个异或第k小 线性基模板)

题目题意: 给你n个数,Q组询问,每次询问这n个数任选几个数异或第k小是多少。#include<cstdio>#include<cstring>#define m(a,b) memset(a,b,sizeof a)using namespace std;typedef long long ll;const int N=1e4+5,Maxbit=63;ll ...

2019-09-09 15:54:57 202

原创 P38129(n个数任意选取几个数的最大异或值)

题目#include<cstdio>using namespace std;typedef long long ll;const int N=50+5,Maxbit=50;ll p[N+1];int main(){ int n;scanf("%d",&n); for(int i=1;i<=n;++i){ ll x;scanf(...

2019-09-09 13:36:30 640

原创 bzoj2565(最长双回文串 记录每个位置的后缀最长回文串)

题目正反两边PAM,记录每个位置向左延伸向右延伸的最长回文串的长度。#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const int N=1e5+5,Max=26;//记录一个以i为下标结尾得最长的字符串的长度struct PAM{ int ...

2019-09-09 10:43:16 193

原创 2019Xuzhou ICPC(Colorful String 所有的回文子串 每个串不同数字的个数 和 PAM模板)

题目题意: 一个串的价值是该串里不同字符的个数,问该串的所有回文子串的价值和。思路: 对于每一种回文串由cur新得到时,继承一下cur得vis数组,再根据vis[cur][c]判断val[now]=val[cur]还是val[now]=val[cur]+1;假如这个回文串之前出现过什么都不变。cnt[]:代表这个节点所代表回文串得个数 val[]:这个回文串里面有多少不同的数字。#incl...

2019-09-08 23:45:24 119

原创 P5496(每个位置的后缀回文串的个数 PAM模板)

题目#include<cstdio>#include<cstring>using namespace std;const int N=1e6+5,Max=26;int lastans;struct PAM{ int nex[N][26],fail[N],s[N],len[N],num[N],cnt[N],las,tot,n; int newno...

2019-09-08 22:48:09 207

原创 spoj694(不相同子串的个数)

题目#include<cstdio>#include<cstring>using namespace std;const int N=2e4+5;char s[N];int x[N],y[N],c[N],sa[N],rk[N],h[N],n,m;inline void get_sa(){ for(int i=1;i<=m;++i) c[i]=0...

2019-09-06 19:49:57 156

原创 POJ3261(可重叠的k次最长重复子串 SA+二分)

题目题意: 给你N K,求这个串出现次数>=K的子串 可重叠。二分答案长度,对n个后缀按字典序分组,使得每组的最长公共前缀>=mid 。判断是否存在一组里面拥有的串的个数>=K 。下面的代码其实是错的!!真不知道那些人怎么过的。。对最后一组的处理很不好。inline int check(int mid){//按height分组后存在一组字符串的个数>=K ...

2019-09-06 18:48:25 114

原创 POJ1743(不可重叠最长重复子串 SA+二分)

题目题意: 给你n个数字代表此时的钢琴按键。问最长的重复的节拍。就转化为n-1个值得不可重叠最长重复子串。题目要求节拍对应的串>=5 意思就是这个最长重复节拍应>=4。思路: 二分答案这个子串最长为mid(下面用k),先然满足二分单调性。将n个后缀按字典序排列后,然后将公共前缀长度>=mid得放到一个小组里。而且这个小组得分配是唯一的。一组任意两串的的最长公共前缀都&...

2019-09-06 14:53:43 274

原创 POJ1509(环形串找到最优断点使得字典序最小 SAM模板)

题目题意:给你一个环形字符串,找个位置切开,使得它的字典序最小。待学习 最小表示法可以在SAM上从根出发每次都尽量跑字母小的出边 跑len条边就停止。#include<cstdio>#include<cstring>#define m(a,b) memset(a,b,sizeof a)using namespace std;const int N=1e4+5...

2019-09-05 14:21:15 280

原创 P3335(蚂蚁寻路 二维dp呜呜呜)

题目一定会保证走出的路线是好几个底在一个水平线高低可能不同的矩形紧挨着。然后总共有2*k+1个矩阵 第奇数个矩阵比旁边的矩阵高。剩下的就是二维DPf[i][j][k][h]:以第i行第j列为右下角而且这是选的第k个矩阵 高度为h 的权值和最大是多少?1.第i行(定量):第j列与第j-1列是同一个矩形 f[i][j][k][h]=f[i][j-1][k][h]+s[j][i]-s[j][h...

2019-09-04 19:34:01 193

原创 bzoj2815(DAG支配树模板)

题目题面建立出原图的支配树的图。以一个点为根的子树的大小-1(减去该点)就是该点的伤害值。模板题 不说啦。#include<cstdio>#include<iostream>#include<queue>#include<cstring>#define en '\n#define m(a,b) memset(a,b,sizeof a...

2019-09-04 19:10:27 135

原创 P2408(不同子串个数 SAM模板)

题目两种方式都可以求出一个字符串不同子串的个数。#include<bits/stdc++.h>#define m(a,b) memset(a,b,sizeof a)using namespace std;typedef long long ll;const int N=1e5+5;struct node{ int len,fa,ch[26]; node(...

2019-09-04 11:22:45 400

原创 P3804(子串的长度*其出现的次数 最大的子串 SAM模板)

题目#include<cstdio>#include<cstring>#include<algorithm>#define m(a,b) memset(a,b,sizeof a)using namespace std;const int N=1e6+5;struct Edge{int to,nex;}edge[N<<1];int h...

2019-09-04 10:45:23 150

空空如也

空空如也

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

TA关注的人

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