自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

cz_xuyixuan的博客

当我跨过沉沦的一切,向永恒开战的时候,你是我的军旗。

  • 博客(39)
  • 收藏
  • 关注

原创 【UOJ170】Picks loves segment tree VIII

【题目链接】点击打开链接【前置阅读】【BZOJ4695】最假女选手【BZOJ3064】【TYVJ1518】CPU监控【UOJ169】【UR #11】元旦老人与数列【思路要点】前置阅读中的前两题中,我们分别对线段树的区间取最大/最小值和线段树的历史最大/最小值进行了研究。本题中,两类问题同时出现,因此我们

2018-01-25 16:33:30 1003

原创 【UOJ169】【UR #11】元旦老人与数列

【题目链接】点击打开链接【前置阅读】【BZOJ4355】Play with Sequence【BZOJ3064】【TYVJ1518】CPU监控【思路要点】前置阅读中的两题中,我们分别对线段树的区间取最大/最小值和线段树的历史最大/最小值进行了研究。本题中,两类问题同时出现,因此我们需要将它们整合起来。支持区间取

2018-01-25 16:22:49 786

原创 【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 400

原创 【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 354 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 248

原创 【BZOJ1711】【Usaco2007 Open】Dining

【题目链接】点击打开链接【思路要点】观察数据范围以及类似于容量限制的一列条件,考虑用最大流解题。一点对答案的贡献可以看做一个(食物、牛、饮料)的三元组,其中食物、牛、饮料中的每个元素仅能使用一次,且食物-牛和牛-饮料均可以根据给出的关系相互匹配。建立分层图,对中间的元素(牛)进行拆点限流,运行最大流即可。时间复杂度\(O(Dinic(2*N+F+D,

2018-01-16 08:48:08 285

原创 【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 624

原创 【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 368

原创 【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关注的人

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