摘要:
[TOC] BZOJ1911 特别行动队 [题目传送门][1] 题解 典型的斜率优化$Dp$。首先如果我们记$sum[i]$表示前$i$个士兵的战斗力之和,那么我们比较容易的可以得出$O(n^2)$的$Dp$:$f[i]=max(f[j]+a (sum[i] sum[j])^2+b (sum[i] 阅读全文
摘要:
[TOC] BZOJ1202 狡猾的商人 [题目传送门][1] 题解 刚开始看题了之后第一反应就是差分约束,后来发现自己可能已经不怎么会差分约束,就准备放弃这道题目去看题解了,但是看到题解大部分都是并查集,才发现这题可能并不用差分约束(虽然差分约束也是可以做的)。我们用带权并查集维护每一个月收入,记 阅读全文
摘要:
[TOC] BZOJ1007 水平可见直线 [题目传送门][1] 题解 经典的单调队列进行维护,先将所有的直线以斜率$A$为第一关键字,以与$y$轴交点高度$B$为第二关键字进行排序。考虑加入一条直线,如果斜率与$A[st[top]]$相同,那么可以直接弹出队首元素(因为肯定会被覆盖掉)。然后判断该 阅读全文
摘要:
[TOC] BZOJ2150 部落战争 [题目传送门][1] 题解 对于每个点拆点之后,每个点都向它能够到达的点的入点连边,跑二分图最大匹配,最后所需的军队个数就是总城镇个数减去匹配个数。因为有一对点能够匹配就说明这两个城镇可以由一只军队征服,所以所需军队=总城镇个数 匹配个数。 code incl 阅读全文
摘要:
[TOC] BZOJ1015 星球大战starwar [题目传送门][1] 题解 比较经典的离线题目,我们将所有的数据读入之后,从后往前离线处理,用并查集维护就行了。注意一个星球被炸掉了之后,这个星球也会消失(即不算在联通块之内)。 code include using namespace std; 阅读全文
摘要:
[TOC] BZOJ1303 中位数图 [题目传送门][1] 题解 有点考验思维的一题。对于这个排列,我们实际上并不需要知道这个排列中每个数的值,实际上我们只需要知道这个数是否比$b$大就行了。所以我们先把所有的数都转化成1或者 1,表示这个数比$b$大或者小。然后记$sum[i]$为修改之后前$i 阅读全文
摘要:
[TOC] BZOJ1050 旅行comf [题目传送门][1] 题解 比较妙的一道题。刚开始看到题的时候,感觉可能是两个二分,但是发现这样找到的答案不一定是最优的。然后发现他的边只有5000条,所以我们将边按权值从小到大排序,枚举每一条边,让这条边作为最小的那条边(即只枚举边权比它大的边),跑最小 阅读全文
摘要:
[TOC] BZOJ3196 二逼平衡树 [题目传送门][1] 题解 比较经典的一道树套树题目了吧,然而先做了带插入区间第$K$小值之后,这题就比较简单了。外层用线段树,里面套一棵平衡树,这里用了$Splay$。不过需要注意的是,查询排名为$K$的数的时候需要二分,然后到树套树中进行查询排名。这样总 阅读全文
摘要:
[TOC] BZOJ1922 大陆争霸 [题目传送门][1] 题解 有点意思的一道题目,相当于是带限制的最短路,我们记$d[i]$表示第$i$个点被几个防御装置保护,$d1[i]$表示如果没有限制的话,到达第$i$个点的时间,$d2[i]$表示实际到达第$i$个点的时间。我们在跑$Dijstra$的 阅读全文
摘要:
[TOC] BZOJ1497 最大获利 [题目传送门][1] 题解 比较容易想到的一道网络流。从源点向每一个中转站连一条流量为$Pi$的边,从每个中转站向其对应的消费人群连一条流量为$inf$的边,从每个消费人群向汇点连一条流量为$Ci$的边。然后就转化成了最小割的问题了。由于中间消费人群与中转站的 阅读全文
摘要:
[TOC] BZOJ1798 维护序列Seq [题目传送门][1] 题解 比较简单的支持区间加和区间乘的线段树,注意$pushdown$的时候区间加和区间乘的处理即可。 code include using namespace std; typedef long long ll; bool Fini 阅读全文
摘要:
[TOC] BZOJ3172 单词 [题目传送门][1] 题解 裸的AC自动机,构造出AC自动机之后,将每一个节点的出现次数都累加到它的$fail$节点上去,最后得到的就是答案了。 code include using namespace std; typedef long long ll; boo 阅读全文
摘要:
[TOC] BZOJ3175 攻击装置 [题目传送门][1] 题解 emm...似乎说这个是最大独立集,可能之前并不知道有这个东西。由于攻击装置是攻击日字形的,所以我们可以根据奇偶性构造二分图,跑出二分图的最大匹配之后,用总的点数减去匹配个数就是答案了(因为这所有的匹配中,每一对只能够选择一个)。 阅读全文
摘要:
[TOC] BZOJ1191 超级英雄Hero [题目传送门][1] 题解 裸的二分图匹配,直接跑匈牙利即可。 code include using namespace std; typedef long long ll; bool Finish_read; templateinline void 阅读全文
摘要:
[TOC] BZOJ1059 矩阵游戏 [题目传送门][1] 题解 刚开始理解错题意了,以为除了主对角线上之外都不能有1.后来发现只要主对角线上可以都是1就是合法的了。实际上的题意就是让你判断$n$行与$n$列是否可以都匹配上,这样就是一个比较简单的二分图匹配,如果第$(i,j)$位置上为1,就说明 阅读全文
摘要:
[TOC] BZOJ1083 繁忙的都市 [题目传送门][1] 题解 水题,裸的最小生成树 code include using namespace std; typedef long long ll; bool Finish_read; templateinline void read(T &x) 阅读全文
摘要:
[TOC] BZOJ1192 鬼谷子的钱袋 [题目传送门][1] 题解 比较水的题目,只要知道用1、2、4...$2^n$可以组成$[1,2^{n+1})$这个区间里的任意一个数这个结论就行了。 code include using namespace std; typedef long long 阅读全文
摘要:
[TOC] BZOJ4240 有趣的家庭菜园 [题目传送门][1] 题解 一个比较好的贪心+树状数组的题目。通过题目我们可以容易地发现我们的目标就是要构造一个数列,使得这个数列是一个单峰数列,并且使得交换的次数最少。实际上交换次数最少就是一个求逆序对的过程,用树状数组就可以简单地解决。而要构造这个单 阅读全文
摘要:
[TOC] BZOJ4320 Homework [题目传送门][1] 题解 看了题解之后发现是一个比较妙的分块+离线+并查集的做法。首先我们以30000为界,那么当询问$\leq 30000$的时候,我们就可以开个桶暴力进行查找。如果大于30000,那么我们就枚举30000以内$x$的倍数,然后通过 阅读全文
摘要:
[TOC] BZOJ4364 wall砖墙 [题目传送门][1] 题解 一道比较好想的线段树。线段树每个节点维护当前区间的最低高度$Mn$与最高高度$Mx$。然后每次询问的时候记得用父节点的值更新子节点的$Mn$和$Mx$就行了,最后每个叶子节点的$Mx$就是答案了。 code include us 阅读全文