自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

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

转载 Codeforces 1090C New Year Presents

New Year Presents用set模拟一下。。 写的bug有点多。#include<bits/stdc++.h>#define LL long long#define fi first#define se second#define mk make_pair#define PII pair<int, int>using ...

2019-10-01 20:39:00 166

转载 codeforces 1156F Card Bag 概率dp

Card Bag状态只会从a小转移到a大,随便dp就好了。#include<bits/stdc++.h>using namespace std;const int N = 5000 + 7;const int mod = 998244353;int n, a[N], sum[N], dp[N][N], sum_dp[N];int inv...

2019-10-01 13:20:00 156

转载 Codeforces 1152E Neko and Flashback 欧拉路径

Neko and Flashback把a[ i ] - b[ i ] 看成边, 就是求一遍欧拉路径就好了。注意图不连通的情况。。#include<bits/stdc++.h>#define fi first#define se second#define mk make_pair#define PII pair<int, int>...

2019-10-01 12:46:00 175

转载 Codeforces 97E Leaders 点双联通

Leaders我们随便找一颗生成树出来, 如果询问的两点的距离为奇数则肯定可以,否则看两点树上路径中有没有边在一个奇环中, 对于一个点双联通分量来说,要么没有奇环, 要么两两之间都有奇环, 这个画画图就能知道,然后求个bcc的过程中处理一下就好了。#include<bits/stdc++.h>#define fi first#define s...

2019-09-30 00:32:00 91

转载 HashTable 板子

struct HashTable { typedef ull T; typedef int S; static const int N = (int)1e6 + 7; static const int M = (int)1e5 + 7; int head[N], tot; struct Node { T f...

2019-09-29 19:50:00 55

转载 Codeforces 1146G Zoning Restrictions dp

Zoning Restrictions发现从左往右dp没有办法dp, 可以想到最大值的性质, 我们考虑构建笛卡尔树的过程。如果 i 的l, r 的最大值, 那么经过 i 点的线段可以全部在枚举 i 的时候处理掉。dp[ i ][ j ][ k ] 表示只关注i - j之间的点和线段所能得到的最大值, 转移方程就很容易写出来啦。好像还能用网络流写, 然而并不会。。#...

2019-09-26 16:27:00 68

转载 Codeforces 1209F Koala and Notebook

Koala and Notebook首先肯定要把边拆点, 就变成了最短路问题, 最短路相同的字典序要求最小。所以我们先bfs找出最短路图建边, 然后dfs把字典序从小到达枚举去更新点,这样就是字典序最小的。其实可以一遍bfs就完成的。#include<bits/stdc++.h>#define fi first#define se secon...

2019-09-25 18:33:00 73

转载 2-sat板子

namespace TwoSat { const int N = 2007; int dfn[N << 1], low[N << 1], belong[N << 1], idx; int in[N << 1], ou[N << 1], stk[N << 1], top; i...

2019-09-21 20:31:00 106

转载 HDU - 5735 Solid Dominoes Tilings dp + 容斥 (看题解)

HDU - 5735感觉还是对容斥不够熟悉啊。。先用轮廓线dp求出f[ i ][ j ]表示 i 行 j 列 没有限制的方案数。然后2^m枚举列的划分情况进行容斥。对于每一种情况t[ i ] 表示这种情况下, i 行没有限制的方案数。g[ i ]表示这种情况下, i 行并且没有可以划分的行的方案数。g[ i ] 可以从 t[ i ] 推过来。#prag...

2019-09-18 18:29:00 81

转载 HDU - 6104 Influence 动态点分治

HDU - 6104非常恶心的一道题, 维护的东西和幻想乡战略游戏差不多, 不过不同的是它的边权会变,并且一个操作的贡献不会因为边权的改变而改变, 我们先考虑改变边权的时候不改变d1, d2数组,那么在query进行u 和 fa[u]合并的时候, 那个边权会多加东西, 我们考虑改变边权的时候把多加的减掉就ok了,也就是多维护一个del 的 树状数组。#pragm...

2019-09-18 15:32:00 82

转载 [ZJOI2015]幻想乡战略游戏 动态点分治

恶补了动态点分治。。#pragma GCC optimize(2)#pragma GCC optimize(3)#include<bits/stdc++.h>#define LL long long#define LD long double#define ull unsigned long long#define fi first#def...

2019-09-17 19:57:00 55

转载 HDU 5737 Differencia set + 主席树

HDU 5737很明显能发现数据是随机的。我们用set去维护值一样的段, 因为随机所以set里面线段的大小减少得很快, 平均大概30个左右。每次查询暴力处理每一段相同的在主席树上查找累加答案就可以了。但是这个好像不是标算, 标算复杂度(n + m) * log(n) 并且数据不是随机也可以。#pragma GCC optimize(2)#pragma GCC ...

2019-09-13 19:51:00 80

转载 HDU - 5741 Helter Skelter 扫描线 + 树状数组

HDU - 5741我们枚举段的起点和终点, 那么每一种情况0的范围是[lx, rx], 1的出现范围是[ly, ry], 可以在二维平面上用矩形表示。然后问题就变成了询问点有没有被至少一个矩形覆盖, 扫描线 + 树状数组就可以了。#pragma GCC optimize(2)#pragma GCC optimize(3)#include<bits/stdc...

2019-09-13 16:55:00 79

转载 HDU - 5735 Born Slippy 思维 + dp(看题解)

HDU - 5735感觉这个思路相当巧妙啊。。考虑最普通的 dp[ i ] = max(dp[ j ] + w[ i ] opt w[ j ]), j 是 i 的祖先。把(2 << 16) 分成前八位和后八位去优化最朴素的dp。 修改遍历后八位, 查询遍历前八位。#pragma GCC optimize(2)#pragma GCC optimize(...

2019-09-13 15:53:00 60

转载 HDU - 5770 Treasure 思维 + 扫描线 + 线段树 (看题解)

HDU - 5770没想出来, 感觉不应该啊, 没有想到转换成二维上的点的问题。对于对钥匙和宝藏(u, v), 如果lca != u && lca != v 那么起点从u子树出发, 终点在v子树就能得到贡献。子树在dfs序下是连续一段, 所以就对应到二维平面一个矩形加上一个数值, 求值最大的点。对于lca == u || lca == v同样可以讨论出来。...

2019-09-12 16:05:00 77

转载 HDU - 5765 Bonds 思维 + sosdp(子集和dp)

HDU - 5765一个bond肯定把n个点分成两个连通块, 并且每个集合对应一个bond, 因为当前这个集合属于第一个连通块,那么它的补集就输入另一个连通块, ok[ mask ] 表示 mask这些点集能否成为一个连通块。我们称一个分配方案mask是好的当且仅当ok[ mask ] == true && ok[ ~mask ] = true;那么我们...

2019-09-11 13:05:00 144

转载 HDU - 5789 Permutation dp (看题解)

HDU - 5789这个题真的是有点恶心了。ans[ i ] 表示以 i 为根的子树的答案, 也就是所有合法排列的逆序对数量。way[ i ] 表示以 i 为根的合法排列数量。dp[ i ][ j ][ k ] 表示以 i 为根所有合法排列中 j 节点排在第 k 个的合法排列数量。然后用这三个dp 数组去更新答案。具体参考https://blog.csdn.net...

2019-09-10 21:14:00 147

转载 HDU - 5788 Level Up 主席树 + 树状数组

HDU - 5788我们考虑把每个点遍历一遍, 把枚举的当前的这个点改成100000对答案的影响。如果我们把 u 变成 100000, 受到影响的是 u 以及它的祖先,我们记midu为子树u的中位数, nexmidu为子树u中位数的下一个数。只有 a[ u ]的值小于等于祖先的mid, 才会改变祖先的薪水, 变成nexmidu。所以我们用主席树求出每个子树的mid 和...

2019-09-09 17:01:00 52

转载 HDU - 5790 Prefix (hash || 字典树)+ 主席树

HDU - 5790前缀总和为o(n)级别的, 然后把前缀hash一下变成求区间本质不同数字的个数。或者不用hash丢到字典树上去就好了。#pragma GCC optimize(2)#pragma GCC optimize(3)#include<bits/stdc++.h>#define LL long long#define LD long...

2019-09-09 15:00:00 73

转载 HDU - 5784 How Many Triangles 极角排序 + 旋转卡壳

HDU - 5784感觉好久没写这种题了啊。。感觉细节好多。对每个点极角排序统计钝角和直角, 还有三点共线的。#pragma GCC optimize(2)#pragma GCC optimize(3)#include<bits/stdc++.h>#define LL long long#define LD long double#defi...

2019-09-08 00:05:00 62

转载 HDU - 5787 K-wolf Number 数位dp

HDU - 5787直接数位dp就好了。#pragma GCC optimize(2)#pragma GCC optimize(3)#include<bits/stdc++.h>#define LL long long#define LD long double#define ull unsigned long long#define fi...

2019-09-06 23:13:00 164

转载 斜率优化的各种板子

维护由若干点(x, y)构成上凸包,并支持求给定一个斜率k的求通过某个点截距的最大值, 需保证 x 递增,询问 k 递减是用query,否则用query2, 单次log(n), 判断需要用到叉积, 注意是否会爆掉LL。namespace CH {struct Point { LL x, y; Point(LL x = 0, LL y = 0) ...

2019-09-06 16:56:00 77

转载 HDU - 5799 This world need more Zhu 树上莫队

HDU - 5799第一部分可以dfs序莫队, 或者可以dsu on tree。第二部分需要树上莫队, 我写的是欧拉序的好像比树分块的常数要大。。用快读卡过去了。#pragma GCC optimize(2)#pragma GCC optimize(3)#include<bits/stdc++.h>#define LL long long#...

2019-09-06 14:25:00 105

转载 HDU - 5800 To My Girlfriend (看题解)

HDU - 5800第一感觉就是算每个 <= s的子集的贡献,如果一个自己长度为k, 那么贡献为 C(k, 2) * C(n - k, 2),然后就需要一个n3的dp去记录长度以及重量和。感觉以前没有写过这个dp。。。其实我们不需要记录长度, 我们只需要记录已经选了几个必选的, 和选了几个一定不选的就可以了。dp[ i ][ j ][ u ][ v ], ...

2019-09-05 19:04:00 65

转载 HDU - 5815 Golden Week dp (看题解)

HDU - 5815感觉要是值域范围是1000以内, 感觉还是能写出来的。。考虑dp[ i ][ j ]表示从 1 到 i 路径上的值是 j , i 这棵子树的最大贡献值。然后可以发现 j 这维可以离散化, 离散化之后最优值不会变, 然后dp一遍就好了。#pragma GCC optimize(2)#pragma GCC optimize(3)#include...

2019-09-04 13:46:00 60

转载 HDU - 5819 Knights dp

HDU - 5819我们考虑每个向左的点, 从左往右进行转移。f[ i ][ j ] 表示前 i 个点攻击完之后, 剩下 j 个点向右移动的概率。考虑转移f[ i ][ j ] = sum(f[ i - 1 ][ k ] * 2 ^ (k - j - 1)) k >= jf[ i ][ 1 ] += sum(f[ i - 1 ][ j ] * 2 ^ (-j...

2019-09-02 23:35:00 73

转载 HDU - 5823 C - color II dp

HDU - 5823枚举子集, 把一种颜色的一起加进去dp, 感觉3^n的复杂度不知道为啥跑这么快。可以用fwt优化到(2 ^ n) * n * n#pragma GCC optimize(2)#pragma GCC optimize(3)#include<bits/stdc++.h>#define LL long long#define LD...

2019-08-31 13:32:00 48

转载 HDU - 5854 K-th value 二分 + dp (看题解)

HDU - 5854二分答案之后, 设答案值为v, x为小于等于v的边的数量, y为大于v的边的数量,列出方程 x > (x + y) / k == (k - 1) * x - y > 0, 感觉有点像线性规划的样子。然后用树形dp去check, 判合不合法的时候可以优化成一个R, 但是不优化也能过。#pragma GCC optimize(...

2019-08-30 22:11:00 81

转载 HDU - 5852 Intersection is not allowed! LGV定理

HDU - 5852就是个裸的LGV定理套一下, 求下行列式的值。#pragma GCC optimize(2)#pragma GCC optimize(3)#pragma GCC optimize(4)#include<bits/stdc++.h>#define LL long long#define LD long double#def...

2019-08-25 21:50:00 81

转载 HDU - 5845 Best Division dp + 字典树

HDU - 5845dp[ i ] 表示分完前 i 段, 最多能分几段。我们能得到一个n2的dp, 然后用字典树优化掉。我用了一个multiset去维护删除, 但实际上因为dp值有单调性, 所有维护sz就够了。换成c++卡内存卡过去的。//#pragma GCC optimize(2)//#pragma GCC optimize(3)//#pragma G...

2019-08-25 21:05:00 63

转载 HDU 5321 Beautiful Set 容斥 (看题解)

HDU 5321感觉有点抗拒这种题目, 看到就感觉自己不会写,其实就是个沙雕题, 感觉得找个时间练练这种题。g[ i ] 表示gcd为 i 的倍数的方案数, f[ i ] 表示gcd为 i 的方案数, 然后先算g[ i ]然后直接容斥。#pragma GCC optimize(2)#pragma GCC optimize(3)#include<bits/st...

2019-08-17 00:14:00 60

转载 HDU - 6647 树hash + dp

6647比赛的时候, 用了一种垃圾树hash,没过去。。#pragma GCC optimize(2)#pragma GCC optimize(3)#include<bits/stdc++.h>#define LL long long#define LD long double#define ull unsigned long long#d...

2019-08-13 19:05:00 136

转载 HDU - 5324 Boring Class BIT套线段树

HDU - 5324直接树套树维护dp, 或者分治 + 树状数组维护。好像内存卡得比较紧。#pragma GCC optimize(2)#pragma GCC optimize(3)#include<bits/stdc++.h>#define LL long long#define LD long double#define ull un...

2019-08-07 11:39:00 79

转载 HDU - 5330 Route Statistics dp(看题解)

HDU - 5330感觉这种dp和子集和dp差不多, 有点难想到。dp[ i ][ S ][ j ] 表示最低的 i 位和 S最低的 i 位一样的所有串中, 和 S 的距离为 j 的有多少个。#pragma GCC optimize(2)#pragma GCC optimize(3)#pragma GCC optimize(4)#include<bit...

2019-08-06 14:20:00 324

转载 二分图求最大独立集模板

#pragma GCC optimize(2)#pragma GCC optimize(3)#pragma GCC optimize(4)#include<bits/stdc++.h>#define LL long long#define LD long double#define ull unsigned long long#define f...

2019-08-02 16:45:00 54

转载 HDU - 5333 Undirected Graph LCT

HDU - 5333感觉这个转换成维护最大生成树的方法很巧妙呀, 离线转化之后就是一个裸的LCT维护最大生成树, 用BIT统计边。#pragma GCC optimize(2)#pragma GCC optimize(3)#pragma GCC optimize(4)#include<bits/stdc++.h>#define LL long lo...

2019-07-31 22:01:00 79

转载 HDU - 5398 GCD Tree LCT

HDU - 5398预处理维护出每个时刻的最大生成树, 就LCT维护就可以了。#pragma GCC optimize(2)#pragma GCC optimize(3)#pragma GCC optimize(4)#include<bits/stdc++.h>#define LL long long#define LD long double...

2019-07-31 09:32:00 151

转载 HDU - 5329 Question for the Leader 基环树 + dp

HDU - 5329首先肯定要把基环扣出来, 然后我们枚举每个块的大小k, k肯定是n的因子。把基环上的点作为树根先把它们的子树都分成k份, 如果无法分肯定不行,如果都可以分, 那么每个基环上的点可能还有一些没有达到k个, 我们需要把相邻的基环组合一下恰好变成k个, 这个可以尺取 + dp 扫过去check,特别注意0是肯定要作为分界点的。。 这个对拍的时候才发现...

2019-07-27 10:16:00 81

转载 Codeforces 1197F Coloring Game 矩阵快速幂 (看题解)

Coloring Game我写的复杂度是 1000 * 64 * 64 * 64 * log(1e9), 感觉这个东西是很好想的, 肯定是T了的。其实可以优化掉一个64, 就是在转移的时候用64 * 64的矩阵和 64 * 1的答案相邻相乘,这样就可以优化掉一个64了, 以前好像没有见过这种小技巧。#pragma GCC optimize(2)#pragma ...

2019-07-23 23:10:00 62

转载 HDU - 6578 Blank dp

Blankdp[ o ][ i ][ j ][ k ]表示前 o 个已经填完, 不同数字的最后一个分别在o, i, j, k, 直接dp, 把限制丢到R, 在R转移出去的时候把不合法的丢掉。#pragma GCC optimize(2)#pragma GCC optimize(3)#pragma GCC optimize(4)#include<bits/...

2019-07-23 13:30:00 68

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

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