- 博客(39)
- 收藏
- 关注
原创 【UOJ170】Picks loves segment tree VIII
【题目链接】点击打开链接【前置阅读】【BZOJ4695】最假女选手【BZOJ3064】【TYVJ1518】CPU监控【UOJ169】【UR #11】元旦老人与数列【思路要点】前置阅读中的前两题中,我们分别对线段树的区间取最大/最小值和线段树的历史最大/最小值进行了研究。本题中,两类问题同时出现,因此我们
2018-01-25 16:33:30 1004
原创 【UOJ169】【UR #11】元旦老人与数列
【题目链接】点击打开链接【前置阅读】【BZOJ4355】Play with Sequence【BZOJ3064】【TYVJ1518】CPU监控【思路要点】前置阅读中的两题中,我们分别对线段树的区间取最大/最小值和线段树的历史最大/最小值进行了研究。本题中,两类问题同时出现,因此我们需要将它们整合起来。支持区间取
2018-01-25 16:22:49 787
原创 【BZOJ1007】【HNOI2008】水平可见直线
【题目链接】点击打开链接【思路要点】将直线按斜率排序,用单调栈维护半平面交。注意有关实数运算EPS的问题。时间复杂度\(O(NLogN)\)。【代码】#includeusing namespace std;#define MAXN 100005#define EPS 1e-6struct line {double k, b
2018-01-24 11:01:18 251
原创 【BZOJ5117】【UOJ164】【清华集训2015】V
【题目链接】BZOJUOJ【思路要点】首先定义一种标记\((a,b)\)表示先给这个区间的数加上\(a\)再和\(b\)取最大值。不难发现题目中的操作均可以表示成\((a,b)\)的形式,分别是\((x,0),(-x,0),(-INF,x)\)。考虑合并标记\((a,b),(c,d)\),那么得到的是\((max(a+c,-INF),max(b+
2018-01-24 10:51:36 624
原创 【BZOJ1004】【HNOI2008】Cards
【题目链接】点击打开链接【思路要点】题意表明,给定的洗牌方式在加上单位置换后(原本存在就不需要再加了)是一个置换群。考虑Burnside引理或Polya定理。注意到题目有颜色的使用次数的限制,因此不便使用Polya定理,考虑使用Burnside引理,求解每一个置换的本质不同的染色方案数的平均数。显然可以设计动态规划在\(O(N*R*G*B)\)的时空
2018-01-22 12:47:46 304
原创 【BZOJ3064】【TYVJ1518】CPU监控
【题目链接】点击打开链接【思路要点】题目中提到的操作均为区间操作,考虑使用线段树。若不存在A询问,剩余部分属于线段树的基本操作。考虑将题目先简化一下:若不存在C操作,如何用线段树解决本题?首先,对于区间最大值询问,我们维护区间最大值\(Max\)和区间加标记\(tagadd\),分别表示对应区间的最大值和未下传的区间加标记值,其下传方式显然。其次,对于区
2018-01-22 11:35:06 725
原创 【BZOJ3052】【UOJ58】【WC2013】糖果公园
【题目链接】BZOJUOJ【思路要点】维护一个糖果集合,支持加入一个糖果,删除一个糖果,显然,我们可以容易地在\(O(1)\)的时间内实现这些操作。考虑使用莫队算法。对树分块,运行树上带修莫队即可。实际上,这是一道树上带修莫队的模板题,相当于将带修莫队、树上莫队和树分块合为一体。时间复杂度\(O(N^{\frac{5}{3}})\)。【代码】#includeusing namespace std
2018-01-19 11:21:15 401
原创 【BZOJ4695】最假女选手
【题目链接】点击打开链接【思路要点】题目中提到的操作均为区间操作,考虑使用线段树。2号操作和3号操作并非线段树的一般操作,无法直接支持标记合并。考虑一个被2号操作定位的区间,记区间最小值为\(Min\),严格次小值为\(Nin\),对该区间实行操作数为\(Val\)的2号操作。若\(Min≥Val\),显然这个操作可以直接忽略。若\(MinVal\),我们可以将这个操作看作是对区间中最小值的整体加
2018-01-19 11:06:33 1654
原创 【BZOJ1758】【WC2010】重建计划
【题目链接】点击打开链接【思路要点】首先,题目要求求解平均值的最大值,考虑分数规划。二分答案\(Mid\),将树上每条边权减去\(Mid\),问题变为树上是否存在边数在\(L\)到\(R\)之间的权值之和非负的路径。考虑点分治。记录\(Dist\)数组,\(Dist_{i}\)表示边数为\(i\)的从分治根节点出发的路径的最大权值。对于每一个分治子树进行BFS,记当前BFS深度为\(i\),在\(
2018-01-18 13:57:28 429
原创 【BZOJ4355】Play with Sequence
【题目链接】点击打开链接【思路要点】题目中提到的操作均为区间操作,考虑使用线段树。注意到数列中的数始终非负,因此3号操作可以看做询问最小值以及其出现次数。2号操作并非线段树的一般操作,无法直接支持标记合并。考虑一个被2号操作定位的区间,记区间最小值为\(Min\),严格次小值为\(Mim\),对该区间实行操作数为\(Val\)的2号操作。若\(Min+Val≥0\),显然这个操作可以看做一个区间加
2018-01-18 13:19:52 700
原创 【BZOJ2594】【WC2006】水管局长数据加强版
【题目链接】点击打开链接【思路要点】若题目仅包含询问操作,显然我们只需保留一棵图的最小生成树,在树上询问两点间边权的最大值即可。而本题中多了一种删边操作,但没有强制在线,因此,我们可以将操作离线,转化为加边操作。用LinkCutTree维护动态最小生成树即可。时间复杂度\(O((M+Q)LogN)\)。【代码】#include<bits/stdc++.h>using namespac...
2018-01-17 20:26:23 255
原创 【BZOJ3027】【CEOI2004】Sweet
【题目链接】点击打开链接【思路要点】我们显然可以得到一个直接的DP做法,记\(F_{i,j}\)表示在前\(i\)个集合中取\(j\)个元素的方案数,则显然有$$ \left\{\begin{aligned}F_{0,0} = 1\\F_{i,j}=\sum_{k=max(0,j-M_{i})}^{j}F_{i-1,k}\end{aligned}\right.$$运用滚动数组,对转移稍加优化,可以
2018-01-17 20:15:36 478
原创 【BZOJ2115】【WC2011】Xor
【题目链接】点击打开链接【思路要点】任取一条1到\(N\)的路径,考虑一个与其相交的环,显然,我们可以半路“绕”一次这个环,使路径的权值Xor上环的权值。这启发我们问题很可能与线性基有关。再考虑一个不与其相交的环,由于图的联通性,我们可以走出路径“绕”一次这个环,再原路返回,多走的路被走了两次,Xor和为0。因此,路径的权值同样Xor上了环的权值。所
2018-01-17 10:31:04 355 1
原创 【BZOJ2597】【WC2007】剪刀石头布
【题目链接】点击打开链接【思路要点】数据范围暗示网络流/线性规划,但直接建图不太可行,需要发掘题目性质。考虑一个原图三个点的子图,它共有3条边,\(2^{3}=8\)种形式,其中能对答案产生1的贡献的有2种。观察剩余6种形式,我们发现,它们都满足三个端点处分别是一入一出、两入、两出。如果我们把出现一次这6种形式之一看做对答案造成1点损失,那么把损失归
2018-01-17 10:05:55 330
原创 【BZOJ3262】陌上花开
【题目链接】点击打开链接【思路要点】直观地来想,本题可以先排序一维,然后使用二维数据结构(树套树,KD-Tree)来解决。时间复杂度\(O(NLog^{2}N)\)或\(O(N\sqrt{N})\)。或者也可以用CDQ分治来解决本题,时间复杂度同样为\(O(NLog^{2}N)\)。其中树套树的空间复杂度高达\(O(NLog^{2}N)\),粗糙的实
2018-01-16 10:34:49 468
原创 【BZOJ2127】Happiness
【题目链接】点击打开链接【思路要点】题目中的一类增益可以归结为“若某些元素的选取状态为0/1,那么额外获得收益”,考虑最大权闭合子图问题。对于一个同学,如果我们默认“选取”的意义是选择文科,“不取”的意义是选择理科,那么其“选取”得到的真正的权值为\(V_{文科}-V_{理科}\)。考虑增益条件,一个增益条件可以拆分为两个形如“若某些元素选取,那
2018-01-16 10:21:35 301
原创 【BZOJ2049】【SDOI2008】洞穴勘测
【题目链接】点击打开链接【思路要点】LinkCutTree模板题,支持维护动态森林的联通性,通过询问所在子树的根部来实现。时间复杂度\(O(MLogN)\)。【代码】#includeusing namespace std;#define MAXN 10005struct LinkCutTree { struct Node
2018-01-16 08:57:23 249
原创 【BZOJ1711】【Usaco2007 Open】Dining
【题目链接】点击打开链接【思路要点】观察数据范围以及类似于容量限制的一列条件,考虑用最大流解题。一点对答案的贡献可以看做一个(食物、牛、饮料)的三元组,其中食物、牛、饮料中的每个元素仅能使用一次,且食物-牛和牛-饮料均可以根据给出的关系相互匹配。建立分层图,对中间的元素(牛)进行拆点限流,运行最大流即可。时间复杂度\(O(Dinic(2*N+F+D,
2018-01-16 08:48:08 286
原创 【BZOJ4196】【UOJ128】【NOI2015】软件包管理器
【题目链接】点击打开链接【思路要点】树链剖分,子树是DFS序中连续的一段,而路径由至多\(O(LogN)\)段组成,剩余部分用线段树解决即可。时间复杂度\(O(QLog^{2}N)\)。【代码】#includeusing namespace std; #define MAXN 120000struct node { int l
2018-01-15 17:24:26 352
原创 【BZOJ1036】【ZJOI2008】树的统计
【题目链接】点击打开链接【思路要点】树链剖分模板题。时间复杂度\(O(QLog^{2}N)\)。【代码】#includeusing namespace std; #define MAXN 30005#define MAXLOG 20#define INF 1e9vector a[MAXN]; struct Node {
2018-01-15 17:13:28 225
原创 【BZOJ1458】士兵占领
【题目链接】点击打开链接【思路要点】矩阵可以看做一张二分图,其中行为左侧点,列为右侧点,矩阵中的元素为边。直观地考虑,我们发现本题可以用有上下界的网络流来实现。由源点向行\(i\)连边,下界为\(L_{i}\),上界为\(+\infty\)。由列\(i\)向汇点连边,下界为\(C_{i}\),上界为\(+\infty\)。若\((i,j)\)不是障碍
2018-01-15 12:54:01 286 1
原创 【BZOJ3172】【TJOI2013】单词
【题目链接】点击打开链接【思路要点】对单词集建立AC自动机,将单词用不可见字符连接,作为母串,放入AC自动机即可。时间复杂度\(O(∑|S|)\)(Fail树上差分+DFS),\(O(N*∑|S|)\)(暴力更新答案),均可通过。【代码】#includeusing namespace std;#define MAXN 1200
2018-01-15 11:03:22 309
原创 【BZOJ3438】小M的作物
【题目链接】点击打开链接【思路要点】题目中的一类增益可以归结为“若某些元素的选取状态为0/1,那么额外获得收益”,考虑最大权闭合子图问题。对于一个种子,为了获得最大收益,我们显然一定要将它种下去。如果我们默认“选取”的意义是种在A田中,“不取”的意义是种在B田中,那么其“选取”得到的真正的权值为\(V_{a}-V_{b}\)。考虑增益条件,一个增益条
2018-01-15 10:46:58 367
原创 【BZOJ3196】【TYVJ1730】二逼平衡树
【题目链接】点击打开链接【思路要点】用外层树状数组套内层权值线段树,那么每一个区间对应的权值线段树可以表示为\(O(LogN)\)棵线段树的和(差)。那么在得到的线段树上二分即可在\(O(LogNLogV)\)的时间内解决题目中所给出的询问。注意修改仅涉及单点修改,那么至多会修改\(O(LogN)\)棵线段树,即修改的时间复杂度为\(O(LogNLo
2018-01-15 09:56:16 318
原创 【BZOJ1497】【NOI2006】最大获利
【题目链接】点击打开链接【思路要点】直接解最大权闭合子图问题即可。时间复杂度\(O(Dinic(N+M,N+3*M))\)。【代码】#includeusing namespace std;const int MAXP = 60005;const int INF = 1e9;template void read(T &
2018-01-15 09:45:00 308
原创 【BZOJ1500】【NOI2005】维修数列
【题目链接】点击打开链接【思路要点】使用Splay维护多个标记进行各种区间操作,代码实现较为困难。内存限制64MB,注意内存回收,避免空间超限。【代码】#includeusing namespace std;#define MAXN 500005#define MAXIN 4500005struct Node { i
2018-01-15 09:24:18 325
原创 【BZOJ1565】【NOI2009】植物大战僵尸
【题目链接】点击打开链接【思路要点】题目中的限制可以总结为“若选取A,则必须选取B”,考虑最大权闭合子图问题。但是我们从样例中发现原图是可能存在环的,而最大权闭合子图问题要求原图是一个有向无环图。进一步分析发现,环上的元素是必然不能选取的,进而连向不能选的元素的元素同样不能选。进行一次DFS,确定每个元素是否可选,在可选的元素中建图,解最大权闭合子图
2018-01-15 09:01:59 403
原创 【BZOJ3223】【TYVJ1729】文艺平衡树
【题目链接】点击打开链接【思路要点】使用可以打标记的Splay来实现区间翻转,时间复杂度\(O(MLogN)\)。代码过于陈旧,风格较丑。【代码】#includeusing namespace std;#define MAXN 100005struct Node { int father, child[2], size,
2018-01-14 20:09:05 349
原创 【BZOJ3224】【TYVJ1728】普通平衡树
【题目链接】点击打开链接【思路要点】本题包含了平衡树最基本的操作。是任何学习平衡树都应当先做一遍的题。笔者实现了四种平衡树,Splay、Treap、替罪羊树和非旋转式Treap(以及其可持久化)。【代码】Splay/*Splay Tree Version*/#includeusing namespace std;
2018-01-14 19:53:39 627
原创 【BZOJ3435】【UOJ55】【WC2014】紫荆花之恋
【题目链接】BZOJUOJ【思路要点】考虑点\(i\)和点\(j\)路径上任意一点\(k\),那么$$R_{i}+R_{j}≥Dist(i,j) \Leftrightarrow R_{i}-Dist(i,k)≥Dist(j,k)-R_{j}$$令\(F_{i,k}=R_{i}-Dist(i,k)\),即\(F_{i,k}≥-F_{j,
2018-01-13 13:18:33 1304
原创 【BZOJ1003】【ZJOI2006】物流运输
【题目链接】点击打开链接【思路要点】显然,两次变换线路之间所走的路一定是所能走的最短路。记\(Cost_{i,j}\)表示第\(i\)天至第\(j\)天均能走的路中最短路的长度。那么可以设计简单DP,用\(F_{i}\)表示第一天到底\(i\)天的最小花费,那么显然有转移方程:$$F_{i}=min_{j=0}^{i-1}\{Cost_{j-1,i}
2018-01-12 11:32:29 431
原创 【BZOJ1002】【FJOI2007】轮状病毒
【题目链接】点击打开链接【思路要点】输入与输出仅包含一个数,考虑找规律。使用欧几里得算法配合\(Matrix-Tree\)定理求解取模一个大质数下问题的答案,并打表。结果如下\(F(1)=1,F(2)=8,F(3)=16,F(4)=45,F(5)=121,F(6)=320,F(7)=841,F(8)=2205\)。发现规律,\(F(i)=3*F(i-
2018-01-12 11:10:27 331
原创 【BZOJ3144】【HNOI2013】切糕
【题目链接】点击打开链接【思路要点】若距离限制\(D≥N\),显然我们可以通过取每一条纵轴上的最小值求解,但我们也可以将每一条纵轴上的的权值首尾相连,形成一条有向链,将链首与链尾分别于源点和汇点用容量无穷的边相连,用最小割求解。现在考虑距离限制\(D\),若将相邻纵轴上距离恰好为\(D\)的点从较后者向较前者连一条容量无穷的边,在最小割问题中就表示不
2018-01-12 10:55:44 369
原创 【BZOJ1001】【BeiJing2006】狼抓兔子
【题目链接】点击打开链接【思路要点】直接运行\(Dinic\)算法即可,注意内存限制。本题使用\(std::vector\)离奇\(Runtime Error\),令笔者不解。本题也可以将最大流问题对偶为最小割,使用最短路算法求解,复杂度为\(O(N*MLogN*M)\)。【代码】#includeusing namesp
2018-01-12 10:10:18 339
原创 【BZOJ1189】【HNOI2007】紧急疏散evacuate
【题目链接】点击打开链接【思路要点】问题中存在一种类似于流量限制的人流限制,考虑用网络流解决本题。枚举答案,对于每个时刻的每个位置分别建立一个点,简单建图后运行最大流,观察是否满流即可。常见的网络流\(Dinic\)算法中建立了反向边,因此可以在\(Ans=x\)的残量网络上加点后直接继续运行\(Ans=x+1\)的结果。最终图中的点数与边数均为\(
2018-01-12 09:54:57 435
原创 【BZOJ1000】A+B Problem
【题目链接】点击打开链接【思路要点】仔细读题,注意空间限制。【代码】#includeusing namespace std;#define MAXN 5000int main() { int a, b; scanf("%d%d", &a, &b); printf("%d\n", a + b); return 0;
2018-01-12 09:02:17 438 1
原创 【UOJ179】线性规划
【题目链接】点击打开链接【思路要点】单纯形法模板题,数据很强,错误的实现很可能无法通过Extra Test。【代码】#includeusing namespace std;const int MAXN = 55;const long double eps = 1e-8;const long double I
2018-01-12 08:58:37 753
原创 【BZOJ1478】Sgu282 Isomorphism
【题目链接】点击打开链接【思路要点】考虑Burnside引理或Polya定理,求解总共\(N!\)种点置换中边的染色方案等价类的个数总和,再将答案除以N!。考虑一个点集的置换\(P_{i}\),若将一个置换看做一张由\(N\)个点、\(N\)条边的无向图,那么显然,该图由若干个环组成。记其中每一个环长为\(A_{i}\),\(A\)可以看做一个\(N
2018-01-11 20:14:38 451 1
原创 【BZOJ1488】【HNOI2009】图的同构
【题目链接】点击打开链接【思路要点】考虑Burnside引理或Polya定理,求解总共\(N!\)种点置换中边的染色方案等价类的个数总和,再将答案除以N!。考虑一个点集的置换\(P_{i}\),若将一个置换看做一张由\(N\)个点、\(N\)条边的无向图,那么显然,该图由若干个环组成。记其中每一个环长为\(A_{i}\),\(A\)可以看做一个\(N\)
2018-01-11 19:56:47 721
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人