4月题目汇总1(4.16---4.22)
2017-04-17 22:09
162 查看
4.17 晚
No.1 来源: BZOJ 2811: [Apio2012] Guard
分类:贪心 区间问题简要题解:
1: 去掉没有忍者的区间
2:离散化剩下的点和剩下的区间(只离散化点就可以了)
3: 区间之间有包含关系的 ,去掉大区间,只考虑小区间。具体实现用一个队列就好。
4: 贪心原则:从左到右没有忍者的区间在右端点放一个
5:在这种原则下 令
F(i)表示前i个区间的最少要放的忍者数
G(i)表示第i n个区间的最少要放的忍者数
依次考虑每个区间,如果它的右端点x放了一个忍者(即F[i]=F[i−1]+1) ,考虑能否在x−1放:
二分求出包含x−1的第y1到y2个区间
若F[y1−1]+G[y2+1]+1>K则 x 一定要放忍者
反思:
1:回去再看一看紫皮书上的区间贪心问题
2: 注意离散化的方法!
3:如何按照需要淘汰区间
4.18晚
No.2 来源: BZOJ 2125
分类:仙人掌图简要题解:
1:把树上倍增的方法延展到仙人掌图上
2: SPFA求出 1 到 其他点的距离 d(i)
3:Tarjan找出所有环,统计这个环的总长totdist,和环上按照某一方向的距离前缀和sum(i)。
4:对于一个环,把dfn最小的当根,其他点连在它上面
5:考虑x,y两点之间的距离,令,t1,t2,分别为lca(x,y)→x,lca(x,y)→y路径上的第一个点
如果t1,t2在同一个环内ans=d[x]+d[y]−d[t1]−d[t2]+len
len表示环上t1−>t2的最短路,有两个方向,也就是:
len=min(|sum(t1)−sum(t2)|,totdist−|sum(t1)−sum(t2))|)
反思:
1.仙人掌图的问题多借鉴一下树上问题的解决方法
2。tarjan不要写错
4.19 上午
No.3 来源: BZOJ 1023
分类:仙人掌图简要题解:
令 f(i) 表示i号点与其子树中的点最远的距离,设当前讨论的点为x
1. 对于桥边,可以像普通的dp一样直接用之前的子树和当前子树更新答案和f(x)
2. 对于环,令dfn 最小的为环的根,记为R,环的信息集中到跟上,便于上一层的dp
3. 找环的方法: 如果v∈son(x),fa(v)≠x,dfn(v)>dfn(x)说明 x→v形成了一个环
4. 把环单独拿出来DP,可以单调队列优化,最后扫一遍环上的点,更新f(R)
反思:
1.仙人掌图要多考虑环的处理方式,对各种找环的方式要熟悉。
2.单调队列居然有点忘了
4.19 下午
No.4 来源: BZOJ 4585
分类:树dp 凸包 可并堆简要题解:
令[fi(x)]表示i号节点为根的子树中将叶子节点距离调整为x的最小代价。
不难现是一个形如下图下凸函数
并且在[L,R] 取到最小值。
令 v∈ son(v),考虑[fv]对[fu]的贡献 令[fv(L)]=[fv(R)]=c
设加入v→u 这条边之后 [fv] 变成了[Fv] 可以得到转移方程如下: [Fv =]
[f(x)+w(x<=L)−x+L+w+c(L<x<L+w)c(L+w<=x<=R+w)x−R−w+c(x>R+w)]
把所有这样的[Fv]合并起来可以得到[fu]
怎么保存这样的凸包信息? splay+启发式合并当然理论可行,但肯定是失了智。
考虑[Fv]和[fv]这两种凸包的特点
[Fv]由[fv] 平移得到第一段,后三段斜率分别是−1,0,1
归纳可知,[fv] 的斜率变化只能是−1 或者 +1
从而[fv] 最右端的斜率一定是degree(v)
把凸包放到按照横坐标排序的大根堆里,pop掉degree(v)−1 个点,就得到了上图中的 L,R两个点。
[f1(0)]显然等于边权之和,一直减到L这个点的函数值就是答案了。
反思:
1.好神奇的题,没什么好说的。
4.19下午
No.5 来源: BZOJ 4316 小C的独立集
分类:仙人掌图简要题解:
1. 令 f(x,0),f(x,1) 分别表示以x为根的子树中不选x和选x的最大独立集合,那么
f(x,0)=∑v∈son(x)max(f(v,0),f(v,1))f(x,1)=∑v∈son(x)f(v,0)
遇到环之后单独拿出来DP,方程差不多,分两情况更新环根的f值就可以了。
套路和 BZOJ 1023 是一样的。
反思:
1.桥边和环分开考虑,环的信息集中到环根。
2.根本思路还是基树形dp。
4.19晚
No.6 来源: BZOJ 2811: [Apio2012] Guard
分类:树形dp简要题解:
1.一定存在一个点x,使得当以x 为根时所有蓝线都形成 fa(i),i,son(i) 的形式。定义这种情形下i 为这组蓝线的中点。
2.如果确定一个点为根,那就是很简单的树dp,
令f(x,0),f(0,1) 分别表示当x 是(或不是)一组蓝线 的中点时,以 x 为根的子树中的蓝线的最大权值和。 那么:令:g(x)=max(f(x,0),f(x,1)+w(fa(x),x))f(x,0)=∑v∈son(x)g(v)f(x,1)=f(x,0)+maxv∈son(x){f(v,0)+w(x,v)−g(v)}
3.考虑换根,从上至下DFS一遍
设原来y是x的儿子,现在把y当成根
现在y不是x的儿子,就要从x中去除y的贡献,所以除了记录最大g(v),还要记录次大,因为当y正好为x儿子中的最大时,x此时只能由次大来转移。
反思:
1:无根树形dp的换根应该都可以这样处理。
2: 最开始没有注意到点只能一个一个加入,所以找错了规律。
4.20上午
No.7 来源: BZOJ 3205 [Apio2013]机器人
分类:dp 斯坦纳树简要题解:
1.考虑dp,f(l,r,i,j) 表示合并了[l,r] 这些机器人,并且停在(i,j) 这个格子上的最 小操作数 ,那么 ans=min(f(1,n,i,j))
2.一共有两种转移:
(1) 合并: f(l,r,i,j)←min(f(l,mid,i,j)+f(mid+1,r,i,j))|l≤mid<r
(2)同层转移 :f(l,r,i,j)←min(f(l,r,x,y)+1)|(x,y)能一步到达(i,j)
3.显然算法的瓶颈在第二种转移以上,这种同层转移的本质和斯坦纳树是一样的,可以用spfa。
4. 用记忆化搜索可以预处理出从每个点出发朝某个方向最终停在哪里。
5.由于spfa的玄学复杂度,要加上一个特别的优化。
反思:
1:这种同层转移特点的dp都可以用spfa的思想。
2: 预处理的时候要考虑循环的情况。
4.20上午
No.8 来源: [Hnoi2016 day1]最小公倍数
分类:并查集 分块简要题解:
1: 考虑暴力,设询问的是u→v,A,B ,那就把a≤A,b≤B的边加入并查集,维护 maxa,maxb,如果u,v 联通,并且maxa=A,maxb=B,就存在这样一条路径。
2. 分块优化,先把所有边按照a 排序,所有询问按照b排序。
把边按照a ,分块 逐块讨论,讨论第x 块的时候,处理a 在这一块中的询问。
那么之前块中的边的a 一定满足要求。 把1⇝x−1块中的边,按照b 排序, 处理询问的时候逐个加入并查集。
3. 对于x 这一块中的边,处理每个询问时加入并查集,询问完暴力恢复即可。
4. 可持久化并查集当然可以,其实只用记录变更的值,暴力改回去就可以。但正因为这样,就不能路径压缩了,只能启发式合并。
反思:
1:常用数据结构不能硬上,好像分块的题目都有这种特点。
2: 这个题的关键在于找到一种讨论顺序,这正是分块和莫队的经典运用。
4.20上午
No.9 来源:BZOJ 4539 [Hnoi2016]树
分类:树 主席树 倍增LCA简要题解:
1.把每次加的子树看成一个大点,构成一棵大树。这棵大树的边权是 每个点代表的小树根在原来树上的距离。x 号大点表示的小树根记为root[x]
2.那么总的第x 个节点对应的大树和原树上的标号(分别记为bid(x),id(x))怎么求?
3.令size[i] 表示大树上前i个大点代表的小节点总数,在size上二分查找x可以找到bid(x)
4.令k=x−size[bid(x)−1],按照题意,id(x)也就是要求原树中root[bid(x)] 这课子树中编号第k 大的。在DFS序上就变成了区间第k大,主席树轻松搞定。
5.对于询问u→v 求出bid(u),bid(v) 在大树上的距离 ,特殊讨论一下lca(bid(u),bid(v))这个大点里面的情况就可以。
反思:
1:long long !long long !long long ! 重要的事情说三遍。
2: 这种树上的问题,不要怕麻烦,每种情况画图想清楚,除了样例之外,一定要自己造一些小数据手动排错。
4.20下午
No.10 来源:BZOJ4540 [Hnoi2016]序列
分类:数论 莫队简要题解:
1. 记num[l,r]表示这一段组成的数对p 的余数,特别的,令suffix[i]=num[i,n]。
2. 题目中要求的就是给定L,R 求满足 num[x,y]=0,L≤x<y≤R 的(x,y)有多少对。
3. 简单推导一秒suffix[x]≡suffix[y+1]+num[x,y] (mod p)
其中num[x,y]≡0(mod p),所以
suffix[x]≡suffix[y+1] (mod p)
也就是求[L,R+1] 这个区间内suffix 值相等的数对,离散化之后直接莫队就行了。
反思:
1:经典的莫队、分块模型要熟悉。
相关文章推荐
- 4月题目汇总2(4.23---4.29)
- 专题待刷题目汇总
- POJ 线段树题目20道汇总+简要算法+分类+难度
- 笔试题目汇总
- POJ搜索题目汇总
- 题目汇总
- C/C++ 笔试、面试题目大汇总
- 题目:找出无向图汇总的相连要素
- C/C++面试笔试题目汇总
- 机器学习题目汇总一
- JAVA题目汇总
- PHP经典面试题目汇总
- 2017最新PHP经典面试题目汇总(上篇)
- 最近找工作面的面试题目汇总(一)
- C/C++ 笔试、面试题目大汇总(转)
- 树状数组学习系列2 之 OJ题目大汇总
- 【Learning】虚树题目汇总
- 最短路径问题经典题目汇总
- 4.16-4.22课题(拼团系统)进度汇报
- NYOJ题目289/456/49-01背包问题汇总