
BZOJ
Tgotp
蒟蒻OIer
blog:tgotp.science
展开
-
5251: [2018多省省队联测]劈配
简单观察即可发现是个网络流。 然后建边很好弄。 考虑第一个询问实际上就只用枚举一下当前放第几志愿能跑出流量。 第二个询问实际上就是重新建图跑流量。 发现直接不是很好求出答案, 那么发现可以在跑第i个人之前,处理一下哪些点还可以放人,然后更新答案即可 c++代码如下:#include<bits/stdc++.h>#define rep(i,x,y) for(regist...原创 2018-04-11 07:51:19 · 259 阅读 · 0 评论 -
3489: A simple rmq problem
写了两个版本: 一个树套树 一个kdt树套树版本并不能在bz ac。 因为内存占用达到了可耻的700mb,即便加了优化依旧在600mb左右 考虑实际上就是要在给定的[l,r][l,r][l,r]区间求出最大的数 使得 nxt[pos]<R pre[pos]<Lnxt[pos]<R pre[pos]&...原创 2018-04-22 20:02:06 · 242 阅读 · 0 评论 -
3140: [Hnoi2013]消毒
匈牙利匹配 观察题目发现肯定每次某一维选1,然后另两维就可以覆盖完, 所以暴力枚举某一维,然后考虑另两维如何最小。 显然是个匈牙利匹配的裸题。 注意这道题一定要加贪心优化,不然稳t。c++代码如下:#include<bits/stdc++.h>#define rep(i,x,y) for(register int i = x; i <= y; ++i)usin...原创 2018-04-18 20:04:20 · 239 阅读 · 0 评论 -
3932: [CQOI2015]任务查询系统
主席树裸题, 对于权值建立主席树。 然后直接跑R的版本,先跑左子树再跑右子树 如果k=0k=0k = 0直接返回即可 还有把一个任务分成两个操作 另外就是如果跑到根还没结束,就说明当前的点只能选kkk个,特判即可 c++代码如下:#include<bits/stdc++.h>#define rep(i,x,y) for(register int i = x ; i...原创 2018-04-22 23:01:48 · 466 阅读 · 0 评论 -
4873: [Shoi2017]寿司餐厅
注意审清题意… 看错题导致浪费了一上午的时间发现其实就是个最大闭合子权图的水题 [l,r][l,r][l,r]肯定要向[l+1,r][l+1,r][l+1,r] [l,r−1][l,r−1][l,r-1]连边 sss向每一个值大于000的区间连边,所有值小于000的区间向ttt连边 把每一种寿司单独做一个点,选每一个点的时候再连过来即可c++代码如下:#include<b...原创 2018-04-23 11:28:37 · 341 阅读 · 0 评论 -
5293: [Bjoi2018]求和
省选题竟然考模板题… 直接预处理 然后每次询问求lca即可 注意得卡一波常… c++代码如下:#include<bits/stdc++.h>#define rep(i,x,y) for(register int i = x ; i <= y ; ++ i)#define repd(i,x,y) for(register int i = x ; i >= y ...原创 2018-04-23 12:28:01 · 498 阅读 · 0 评论 -
4818: [Sdoi2017]序列计数
考虑至少含一个质数的方案等于所有方案 −−-不含质数方案 然后考虑如何求,看到1e91e91e9很容易想到矩阵快速幂, 然后转移也就出来了,对于不含质数的方案跑一边线性筛即可 c++代码如下:#include<bits/stdc++.h>#define rep(i,x,y) for(register int i = x ; i <= y ; ++ i)#define...原创 2018-04-23 14:56:42 · 208 阅读 · 0 评论 -
1017: [JSOI2008]魔兽地图DotR
耗费了我一上午的时间来肝这个题 考虑令f[i][j][k]f[i][j][k]f[i][j][k]表示第i个点花费了k的价值能提供j个道具用来合成的最大价值。。。 然后发现dpdpdp式子很容易推出来,但是发现这个复杂度嘛,不敢恭维O(100∗n∗m∗m)O(100∗n∗m∗m)O(100*n*m*m) 左思右想也优化不了,然后去看了题解,,,发现真的是这个玄学的复杂度… 但是需要加优化,...原创 2018-04-19 12:24:22 · 346 阅读 · 0 评论 -
4827: [Hnoi2017]礼物
首先知道旋转的一般套路就是开两倍。 然后此时发现可以把 ∑ni=1(ai−bi)2∑i=1n(ai−bi)2\sum_{i=1}^{n}(a_i-b_i)^2化作∑ni=1a2i+∑ni=1b2i−2∗∑ni=1ai∗bi∑i=1nai2+∑i=1nbi2−2∗∑i=1nai∗bi\sum_{i=1}^{n}a_i^2 + \sum_{i=1}^{n}b_i^2 - 2*\sum_{i=1}^...原创 2018-04-23 21:16:50 · 182 阅读 · 0 评论 -
1034: [ZJOI2008]泡泡堂BNB
知道原本可以不用写的这么麻烦 懒得想了 容易想到优先匹配 胜利 的, 然后 再去 匹配平局 然后就是二分一下然后并查集搞搞就行了 对于 最小 得分 就是对手最大得分, 反过来对对手处理一遍即可 c++ 代码如下:#include<bits/stdc++.h>#define rep(i,x,y) for(register int i = x ; i <= y; ...原创 2018-04-23 23:27:14 · 214 阅读 · 0 评论 -
2879: [Noi2012]美食节
实际上这题是SCOI2008修车的强化版. 这题只用注意一个 地方: spfa一定要入出队优化…不然稳t… C++代码如下:#include<bits/stdc++.h>#define rep(i,x,y) for(register int i = x; i <= y; ++ i )#define repd(i,x,y) for(register int i = x;...原创 2018-04-18 14:09:29 · 293 阅读 · 0 评论 -
3676: [Apio2014]回文串
卡着时限过的… 时间大概是垫底一般的存在把… 容易想到马拉车处理回文串(不过这题大佬都是回文自动机啥的。。。 然后考虑相同的串一定是sa上h数组连续的一段,那么二分左右端点即可. 然后扫一遍就求出了答案 c++代码如下:#include<bits/stdc++.h>#define rep(i,x,y) for(register int i = x; i <...原创 2018-04-12 17:39:57 · 204 阅读 · 0 评论 -
4198: [Noi2015]荷马史诗
huffman编码 c++代码如下:#include<bits/stdc++.h>#define rep(i,x,y) for(register int i = x;i <= y; ++ i)#define repd(i,x,y) for(register int i = x; i >= y; -- i)typedef long long ll;using n...原创 2018-04-18 08:50:41 · 438 阅读 · 0 评论 -
2946: [Poi2000]公共串
一开始理解错了子串的含义,尴尬… 理解了题意. 其实就是个后缀自动机裸题,把第一个串建后缀自动机,然后把所有串放在上面跑即可… c++代码如下:#include<bits/stdc++.h>#define rep(i,x,y) for(register int i = x ; i <= y; ++ i )#define repd(i,x,y) for(registe...原创 2018-04-16 20:23:23 · 262 阅读 · 0 评论 -
5210: 最大连通子块和
暂时拿了榜一… . 观察这道题,很容易想到一个dp方程… 令f[i]表示i的子树与i相连最大联通块点权和 。。。 那么只要保证子树f[j] > 0那么一定可以加入f[i]当中。。。 那么现在就得到了所有的f值… 考虑答案实际就是在 i 的子树中所有节点的f值得max 然后就想到用树剖维护… 发现对于更新. 如果该点得值变大.那么对于该点以上所有f大于0得点都可以增加这个值。...原创 2018-04-04 09:34:34 · 963 阅读 · 0 评论 -
2754: [SCOI2012]喵星球上的点名
洛谷会t一个点… 想法很简单.. 就是说按照后缀数组一般处理得方法,把所有串接在一起,然后暴力看哪些串有连在一起。c++代码如下:#include<bits/stdc++.h>#define rep(i,x,y) for(register int i = x ;i <= y;++ i)#define repd(i,x,y) for(register int i =...原创 2018-04-04 11:21:00 · 299 阅读 · 0 评论 -
2956: 模积和
以为是个大水题。。。 结果写了两小时 我数学真差.jpg 容易发现式子可以化成 然后拆开可以得到(四个)五个式子,分别计算即可… (懒得写公式了,自己推一下吧 然后你就能发现死活过不去… 原因是啥呢…给的这个模数竟然不是个质数。 那么考虑用exgcd来求解逆元就行了 c++代码如下:#include<bits/stdc++.h>#define rep(i,x...原创 2018-04-04 13:11:36 · 247 阅读 · 0 评论 -
4448: [Scoi2015]情报传递
主席树维护树链剖分… 一开始直接套了个贪心的线段树… 发现t的没边了….这就很尴尬呀.. 观察后发现可以把一个询问转换为寻求区间有多少小于i-c-1的数. 发现这个性质就很好,一个主席树可以很轻松的解决,那么套上就好啦. c++代码如下:#include<bits/stdc++.h>#define rep(i,x,y) for(register int i = x; i...原创 2018-04-04 17:16:42 · 247 阅读 · 0 评论 -
1152: [CTSC2006]歌唱王国Singleland
这两题很类似,看看上面题解即可 c++代码如下:#include<bits/stdc++.h>#define rep(i,x,y) for(register int i = x ;i <= y;++ i)#define repd(i,x,y) for(register int i = x ; i >= y;-- i)using namespace std;...原创 2018-03-29 16:26:34 · 615 阅读 · 0 评论 -
2843: 极地旅行社
明天省选复习一下板子。 lct板子题…操作都是基本要求… 不过一遍ac还是超出了我的预料QWQ c++代码如下:#include<bits/stdc++.h>#define rep(i,x,y) for(register int i = x; i <= y; ++ i)#define repd(i,x,y) for(register int i = x; i >...原创 2018-04-05 15:20:32 · 292 阅读 · 0 评论 -
4817: [Sdoi2017]树点涂色
lct套线段树 c++代码如下:#include<bits/stdc++.h>#define rep(i,x,y) for(register int i = x; i <= y; ++ i)#define repd(i,x,y) for(register int i = x; i >= y; -- i)typedef long long ll;using ...原创 2018-04-05 17:09:07 · 164 阅读 · 0 评论 -
1941: [Sdoi2010]Hide and Seek
突然发现 SCOI之前我tm刷的基本都是SDOI 的题… kd-tree板子题… c++代码如下:#include<bits/stdc++.h>#define rep(i,x,y) for(register int i = x ; i <= y; ++ i)#define repd(i,x,y) for(register int i = x ; i >= y; ...原创 2018-04-05 21:14:04 · 405 阅读 · 0 评论 -
1018: [SHOI2008]堵塞的交通traffic
考虑如果是一条直线能用线段树非常容易的维护, 但是现在是一个矩形… 考虑在直线能否联通的情况下实际是维护左右端点连通性 扩展到矩形,思考可以得到,现在维护6个变量能达到相同效果 用lululu代表左上,ldldld代表左下,rururu代表右上,rdrdrd代表右下 那么现在就是维护 lu−ld lu−ru ...原创 2018-04-19 18:31:01 · 244 阅读 · 0 评论 -
1079: [SCOI2008]着色方案
很好的一道dpdpdp题,成功筛掉了我这种垃圾 O(ck)O(ck)O(c^k)的算法不难想到,然而这显然不行 考虑优化,把数量相同的颜色看作一组, 那么能知道在下一次转移的时候 只有是当前颜色数量减一的颜色数量统计时需要减一 复杂度O(kc)O(kc)O(k^c) c++代码如下:#include<bits/stdc++.h>#define rep(i,x,y) fo...原创 2018-04-24 10:09:36 · 150 阅读 · 0 评论 -
1093: [ZJOI2007]最大半连通子图
tarjan + 拓扑序板子题c++代码如下:#include<bits/stdc++.h>#define rep(i,x,y) for(register int i = x ; i <= y; ++ i)#define repd(i,x,y) for(register int i = x ; i >= y; -- i)typedef long long ll...原创 2018-04-24 10:47:46 · 326 阅读 · 0 评论 -
3670: [Noi2014]动物园
仔细看完题以后,发现肯定和kmp有关,先搞出 next 数组然后发现答案就是某一个next < i/2时的值但是这个样子的话极限情况时n^2,发现瓶颈在于找next,然后考虑倍增一下就出来了.注意卡常c++代码如下:#include<bits/stdc++.h>#define rep(i,x,y) for(register int i = x ; i &...原创 2018-05-05 16:25:42 · 242 阅读 · 0 评论 -
2257: [Jsoi2009]瓶子和燃料
普及组的题也开始做不来了… 一开始傻逼了,去写了个假算法… 后来才发现,直接用map统计每个数的因数不就好了… c++代码如下:#include<bits/stdc++.h>#define rep(i,x,y) for(register int i = x ; i <= y; ++ i)#define repd(i,x,y) for(register int i...原创 2018-04-28 11:00:34 · 365 阅读 · 0 评论 -
2396: 神奇的矩阵
一开始想了个fft 时间复杂度O(t∗n2log n2)O(t∗n2log n2) O( t * n^2 log\ {n^2}) 应该超时了… 然后看了题解… 随机化… c++代码如下:#include<bits/stdc++.h>#define rep(i,x,y) for(register int i = x ; i <= y; ++ i)...原创 2018-05-07 09:34:17 · 707 阅读 · 0 评论 -
5313: 新Fib数列
很明显在%5的意义下只会有 0 1 2 3 4 这几个取值且由于fib数列由前两项推出,那么很显然打个表就行了,,,c++代码如下:#define rep(i,x,y) for(register int i = x; i <= y; ++ i)using namespace std;template<typename T>inline void read(T&...原创 2018-05-07 20:59:21 · 400 阅读 · 0 评论 -
5312: 冒险
题解:链接 c++代码如下:#include<bits/stdc++.h>#define rep(i,x,y) for(register int i = x ;i <= y; ++ i)#define repd(i,x,y) for(register int i = x ; i >= y; -- i)using namespace std;typedef lo...原创 2018-05-08 10:43:38 · 390 阅读 · 0 评论 -
2811: [Apio2012]Guard
花了一天时间颓废这道题(颓废才是重点。。。) 贪心的想,从左望右,对于可以放的位置,放在最后一定能得到最优解,反之亦然 那么先考虑处理掉所有0的区间,然后离散化。 然后处理出对于每个区间最少花多少代价处理出来。(前缀 ,后缀) 那么容易想到,如果离散化后只有k个点,那么直接输出答案即可。 并且 如果区间大小为1 也必须直接输出。 除此之外,所有输出的点一定是当前区间的右端点。 那么考...原创 2018-05-21 21:53:45 · 301 阅读 · 0 评论 -
3569: DZY Loves Chinese II
三倍经验… 这个给边随机化我似乎在那里见过? …大概就是给边分为树边和非树边,非树边的值是随机的,树边的边是子树的非树边的异或和 然后线性基搞一搞就好了 c++代码如下:#include<bits/stdc++.h>#define rep(i,x,y) for(register int i = x ;i <= y; ++ i)#define repd(i,x,y)...原创 2018-05-08 19:54:30 · 254 阅读 · 0 评论 -
4237: 稻草人
考虑两个点x,yx,yx,y不能构成一个合法方案, 必须满足对于存在点zzz 满足 a[x].x<a[z].x<a[y].xa[x].x<a[z].x<a[y].x a[x].x < a[z].x < a[y].x 和a[x].y<a[z].y<a[y].ya[x].y<a[z].y<a[y].ya[x].y < a[z].y < a[y]....原创 2018-06-01 09:01:36 · 365 阅读 · 0 评论 -
5372: [Pkusc2018]神仙的游戏
这题务必用fft写,反正ntt我bzoj一直tle,loj 8s做这题首先要知道一个性质,如果选取长度为len的串,那么该串可行,一定满足不存在一对 01,其距离相差len (X而不是一开始我想的类似 另外一个fft的题… 那么如果存在一对01其距离差为len,那么对于所有k|len的串都不可行。 考虑首先求出所有01串的差值len, 暴力n^2肯定不行 考虑两个数组a,b,若s[i]...原创 2018-06-10 21:01:17 · 525 阅读 · 0 评论 -
3083: 遥远的国度
唔,没初始化 wa了一次… 思路很一眼。 就是说 考虑 树剖 如果 查询点是首都的祖先,那么查询点构成的子树就是 整个树除了 查询点包含 首都的儿子以外所有点。 那么 知道一个子树在树剖上是连续一段区间, 即 现在需要求 出 包含首都的那棵子树的根, 用类似倍增lca的方法即可。 对于查询点不是首都的祖先的情况,答案直接为 查询点这棵子树 的答案 搞定 c++代码如下:#inc...原创 2018-05-05 09:48:05 · 246 阅读 · 0 评论 -
2435: [Noi2011]道路修建
普…普及组? 读完题以后我感觉我是不是读错题了…. 然后发现真的是水题… 按题目所说的模拟就好了… 一遍dfs搞定 c++代码如下:#include<bits/stdc++.h>#define rep(i,x,y) for(register int i = x ; i <= y; ++ i)#define repd(i,x,y) for(register int...原创 2018-05-05 08:31:33 · 250 阅读 · 0 评论 -
3771: Triple
考虑三个多项式 a b ca b c a \ b \ c 令 aa a 表示选取一个相同的方案数 令 bb b 表示选取两个相同的方案数 令 cc c 表示选取三个相同的方案数 取一个的方案数即 aa a 取两个的方案数即 a2−b2a2−b2 \frac{a^2-b}{2} 考虑实际上 a2−ba2−b a^2-b 算得是排列数,...原创 2018-04-26 11:50:23 · 271 阅读 · 0 评论 -
2763: [JLOI2011]飞行路线
应该没啥说的,跑一遍spfa即可 c++代码如下:#include<bits/stdc++.h>#define rep(i,x,y) for(register int i = x; i <= y; ++ i)#define repd(i,x,y) for(register int i = x; i >= y; -- i)using namespace std;...原创 2018-04-24 11:08:56 · 300 阅读 · 0 评论 -
1095: [ZJOI2007]Hide 捉迷藏
思路看得题解: 考虑将整个树dfs下来,得到一个括号序列,对于两个点,他们之间的距离就是他们之间的括号数量去掉中间匹配的括号的数量 那么考虑线段树维护,用s表示左括号数量,s2表示右括号数量,ri liri liri \ li分别表示区间黑点左括号最多的数量/右括号最多的数量, rm lmrm lm rm \ lm 分别表示区间到右端点/左端点括号最多的...原创 2018-04-19 23:06:16 · 326 阅读 · 0 评论 -
2186: [Sdoi2008]沙拉公主的困惑
答案为n!m!∗m!∗(primei−1primei)(mod p)n!m!∗m!∗(primei−1primei)(mod p) \frac{n!}{m!}*m!*(\frac{prime_i-1}{prime_i}) (mod\ p)那么预处理即可,然后用快速幂算逆元c++代码如下:#include<bits/stdc++.h>#define re...原创 2018-05-01 17:01:15 · 238 阅读 · 0 评论