自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

玛珈山大萌新

破山中贼易,破心中贼难。不破不立,破而后立,力而为人。

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

原创 [分块]Most Influential Pumpkin

题目:Most Influential Pumpkin分析:将原序列a分块,并保持块内元素升序排列,存于b。对于每次查询l, r,左右两端的块的暴力+1,中间的块的懒惰标记+1.设上一次的中位数为mid,如果当前更新完之后,数组a中<=mid的数< n / 2 + 1,那么mid++代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗/

2021-03-11 22:38:48 173

原创 [hash]小G的LY数对

题目:分析:参考博客代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗//typedef __int128 lll;#define print(i) cout << "debug: " << i << endl#define close() ios::sync_with_stdio(0), cin.tie(0

2021-03-07 21:27:10 195

原创 [费用流]2194. 负载平衡问题

题目:acwing2194. 负载平衡问题分析:建图方式:每个点向左右两边建边,容量无穷,花费为1s向高于平均值的建边,容量为差值,花费为0低于平均值的向t建边,容量为差值,花费为0代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗//typedef __int128 lll;#define print(i) cout <<

2021-02-25 15:02:34 147

原创 Codeforces Round #703 (Div. 2) E. Paired Payment

题目:E. Paired Payment分析:定义dis[i][j][k]表示从起点到i点的路径的最后一条边权值为j且经过的边数是奇数(k=1)时的最短路,只有从k=1转移到k=0时,转移才加cost。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗//typedef __int128 lll;#define print(i) cout <

2021-02-23 02:09:08 135

原创 模拟退火

模拟退火题目1:Acwing 3167. 星星还是树分析:模板题代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗//typedef __int128 lll;#define print(i) cout << "debug: " << i << endl#define close() ios::sync_w

2021-02-22 22:14:12 139

原创 [模拟退火]acwing3167. 星星还是树

题目:3167. 星星还是树分析:模板题,退火真香代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗//typedef __int128 lll;#define print(i) cout << "debug: " << i << endl#define close() ios::sync_with_stdio

2021-02-20 22:18:30 153

原创 [最大权闭合图]acwing2176. 太空飞行计划问题

题目:acwing2176. 太空飞行计划问题分析:最大权闭合图的求解:s到正权点连边,容量为点权,负权点到t连边,容量为负权的绝对值,二分图中间的边(题目给的边),容量为inf最大权即为sum(正权) - dinic()闭合点集的求解跑一个dfs即可代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗//typedef __int128 l

2021-02-18 17:31:09 139 1

原创 [最小点割集]381. 有线电视网络

题目:381. 有线电视网络分析:将每个点拆点,分成入点和出点,两者相连,容量为1无向边拆成两个有向边,每条有向边由出点连向入点,容量为inf枚举s,t,求最小割(即为点内边组成的边集),不断更新答案代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗//typedef __int128 lll;#define print(i) cout &

2021-02-18 16:25:21 88

原创 [最大点权独立集]AcWing 2326. 王者之剑

题目:AcWing 2326. 王者之剑分析:本题的三个性质:只能在偶数时间取宝石相邻格子不能同时取将棋盘黑白染色组成二分图之后,独立集跟原题的合法方案一一对应所以本题就是求一个二分图的最大点权独立集代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗//typedef __int128 lll;#define print(i) cout

2021-02-17 18:19:22 114

原创 [最小点权覆盖集]AcWing 2325. 有向图破坏

题目:AcWing 2325. 有向图破坏分析:将每个点拆成两个点——负点和正点,构建二分图。负点会覆盖从出边),正点会覆盖入边。然后这个问题就变成了求最小点覆盖问题了。最小点权覆盖求法:然后建立源点S,向其中左侧点连一条容量为该点权值的边建立汇点T,由右侧点向T连一条容量为该点权值的边对于二分图中原有的边,改为由与S相连的点连向与T相连的点的一条容量为INF的边跑一遍最大流,其结果就是最小点权和。然后最小割(简单割)涉及到的点即为所求的点集。代码:#include <bit

2021-02-17 17:04:35 157

原创 Codeforces Round #701 (Div. 2) F. Copy or Prefix Sum

题目:F. Copy or Prefix Sum分析:参考题解通过水平线优化空间和时间,可以将二维变成一维,并且使得每次循环map至多新增一个节点,看了一上午,终于看懂了代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗//typedef __int128 lll;#define print(i) cout << "debug: "

2021-02-16 12:16:34 151

原创 [01分数规划]Dropping tests POJ - 2976

题目:Dropping tests POJ - 2976分析:首先这题显然是兹磁二分的,而∑ai/∑bi≥x就等价于∑ai−x∑bi≥0。所以我们发现二分完把ai-x*bi排序后把最大的n-k个选出来就行了。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗//typedef __int128 lll;#define print(i) cout

2021-02-15 17:11:34 107

原创 [网络流]2279. 网络战争

题目:2279. 网络战争分析:1、最小化平均值可以考虑二分答案,用以下的不等式判断二分是否合法。2、每条边权与枚举的平均值作差后,如果为负,则一定选。3、对于作差非负的边组成的网络跑最大流,无向图建边双向权值相同。4、double二分的循环条件要注意代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗//typedef __int128 ll

2021-02-11 00:56:32 223 1

原创 [概率dp]P1654 OSU!

题目:P1654 OSU!分析:代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗//typedef __int128 lll;#define print(i) cout << "debug: " << i << endl#define close() ios::sync_with_stdio(0), cin.t

2021-02-04 21:25:52 105

原创 [树形dp]P3174 [HAOI2009]毛毛虫 题解

题目:P3174 [HAOI2009]毛毛虫分析:dp[i]表示考虑以i为根节点的子树,以i为头构成的最大毛毛虫。每个点贡献答案时,要考虑左右两条链加上相邻点(注意:有父节点的话父节点也算!)代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗//typedef __int128 lll;#define print(i) cout <<

2021-02-04 17:54:32 273

原创 【LGR-081】洛谷 1 月月赛 & EZEC R5 Div.2

题目:P7287 「EZEC-5」魔法分析:做法一定是先多次整体加1,再多次整体x2。考虑到2的次数是log级别的,可以先枚举2的次数,然后再二分+1的次数,然后二分的judge里面写个判断最大连续子段和。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗//typedef __int128 lll;#define print(i) cout &

2021-02-02 22:39:53 163

原创 [网络流]acwing 2237. 猪

题目:AcWing 2237. 猪分析:由于每个人取猪的时序关系,可以把猪看成遗产,由最近的一个人继承过来。建图方式:源点:0汇点:n + 1每个人所需的猪圈从上一次使用该猪圈的人连一条inf边过来,如果无人用过该猪圈,则从s连一条容量为该猪圈初始猪数的边每个人连一条容量为猪需求的边到t代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗

2021-02-02 18:56:48 128

原创 [网络流]AcWing 2180. 最长递增子序列问题

题目:AcWing 2180. 最长递增子序列问题分析:拆点的题目。pro1:经典dp,求得最长为maxxpro2:每个点只能用一次,于是拆点。s - > 首点的左点, 长度为maxx的末点的右点 - > tdp小的连向dp大的pro3:pro2的前两种方式的边的容量改为inf,继续增广代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long

2021-01-31 22:43:35 104

原创 [逆向思维]Codeforces Round #698 (Div. 2) E. Nezzar and Binary String

题目:E. Nezzar and Binary String分析:这个题按时间从后往前思考,会发现如果不让他生气,每次修改的操作都是唯一的,用一个线段树维护即可代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗//typedef __int128 lll;#define print(i) cout << "debug: " <&l

2021-01-29 15:36:38 262

原创 acwing2277. 秘密挤奶机 二分+最大流

题目:acwing2277. 秘密挤奶机分析:二分答案,然后对于当前的答案求一个最大流即可代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗//typedef __int128 lll;#define print(i) cout << "debug: " << i << endl#define close()

2021-01-28 18:57:49 760

原创 最大流之上下界可行流

题目:AcWing 2188. 无源汇上下界可行流分析:每条边的容量范围整体减小下限个单位,不足用源点汇点补。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗//typedef __int128 lll;#define print(i) cout << "debug: " << i << endl#define

2021-01-27 22:03:55 134

原创 AtCoder Beginner Contest 189

题目:F - Sugoroku2分析:这道题不算太难,就是个解方程,还有就是浮点精度。f[i]表示从i到终点的期望步数x[i], y[i] = sumf(i +1, … i + m) / m + 1 = x * f[0] + y每次维护滑动窗口内的x和y,最后根据f[0] = x * f[0] + y即可求出f[0]对于无解的情况,要用eps判断。代码:#include <bits/stdc++.h>using namespace std;typedef long long

2021-01-25 15:47:16 79

原创 [DP训练]P4342 [IOI1998]Polygon

题目:P4342 [IOI1998]Polygon分析:这道题就只有一点需要注意:不能只用一个dp[i][j](最大值)来转移,因为子状态可能为负,会影响转移,因此还要再开一个dpmin维护最小值。(又被卡了一会,还是太菜了,啥时候随手切蓝题)代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗//typedef __int128 lll;#def

2021-01-19 22:09:16 94

原创 Educational Codeforces Round 102 (Rated for Div. 2)

题目:E. Minimum Path分析:这个题首先是最短路问题。只保留公式的第一项的话,就是最朴素的最短路问题。现在加了两项,很显然是最短路的变形。现在我们可以定义最短路为:总路径长度必须删除一条边的权值、添加一条边的权值。这样我们可以将原来的一维dis数组升为3维,dis[i][j][k],j表示是否删除了一条边,k表示是否添加了一条边。dis[i][1][1]就是最终我们要求的代码:#include <bits/stdc++.h>using namespace std;

2021-01-17 16:45:35 105

原创 树上差分

题目1:P3128 [USACO15DEC]Max Flow P分析:修改u-v路径上的点的步骤:num[u]++, num[v]++, num[lca(u, v)]–, num[fa[lca(u, v)]]–代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗//typedef __int128 lll;#define print(i) cout

2021-01-15 23:58:20 186

原创 Codeforces Round #695 (Div. 2)

题目:D. Sum of Paths分析:这个题目就难在如何求出每个位置经过的次数。看到数据量想到dp我们设f[i, j]表示走了i步到达j的方案数。状态转移及其简单,这里不写了。然后思考如何求出每个点经过的次数cnt[j]。cnt[j] = f[i, j] * f[k - i, j] (后一项可以看成走了i步到j之后,再走k - i步的逆过程)由于两个过程是独立的,所以用乘法代码:#include <bits/stdc++.h>using namespace std;ty

2021-01-13 22:55:19 73 1

原创 [dp]Misunderstood … Missing Gym - 102056I

题目:链接分析:分析代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define print(i) cout << "debug: " << i << endsl#define close() ios::sync_with_stdio(0), cin.tie(0

2020-11-30 19:42:25 108

原创 [Dp每日训练]送外卖2

题目:送外卖2分析:每个任务有三个状态,未开始,已开始未结束,已结束。考虑状压。dp[i][j]表示所有任务的状态,将每个任务用三进制表示成i,j表示此时在j点,所花费的最少时间。状态转移的时候先枚举每个任务,然后枚举转移过来的点。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define

2020-11-26 11:42:23 183

原创 ACM-ICPC 2018 徐州赛区网络预赛(重现)

题目:B - BE, GE or NE 计蒜客 - A2001分析:记忆化搜索,dp[pos][val]表示进行第pos轮的时候,分数为val的结果(2表示good ending,1表示normal,0表示bad,先手希望值越大越好,后手相反)。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#de

2020-11-24 11:48:00 127

原创 ACM-ICPC 2018 南京赛区网络预赛

题目:L - Magical Girl Haze 计蒜客 - A1958分析:代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define print(i) cout << "debug: " << i << endsl#define close() ios:

2020-11-22 22:01:44 368

原创 [AcWing面向模型编程]1285. 单词

题目:1285. 单词分析:若b串是a串的子串,那么b串一定也是a串某个前缀的后缀。因此我们从下往上遍历每个点,将其贡献加到其nex点即可(理论依据是:拓扑序)代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define print(i) cout << "debug: " <&

2020-11-20 20:25:39 133

原创 AcWing 253. 普通平衡树

Treap平衡树题目:253. 普通平衡树您需要写一种数据结构(可参考题目标题),来维护一些数,其中需要提供以下操作:插入数值x。删除数值x(若有多个相同的数,应只删除一个)。查询数值x的排名(若有多个相同的数,应输出最小的排名)。查询排名为x的数值。求数值x的前驱(前驱定义为小于x的最大的数)。求数值x的后继(后继定义为大于x的最小的数)。注意: 数据保证查询的结果一定存在。输入格式第一行为n,表示操作的个数。接下来n行每行有两个数opt和x,opt表示操作的序号(1<

2020-11-19 15:14:46 123

原创 AcWing 352. 闇の連鎖 (树上差分)

题目:352. 闇の連鎖分析:m条边,每一条都会使得树上路径上的每一条边所处的环数++,求和可以用树上差分解决。每一条边可能处于多个环中,如果处于的环数为0,则ans+=m,若环数为1,则ans++,否则无法通过剪断该边来贡献答案。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define p

2020-11-18 11:47:50 82

原创 A - Girls Band Party 计蒜客 - 42381(银川站-分组背包)

题目:A - Girls Band Party 计蒜客 - 42381分析:首先是分组背包,然后考虑如何设置状态。分组最多1e51e51e5,所以后面的状态不能太大。挖掘题目的含义,设加成分别是1和2,则总的加成不超过15,而且总的选的物品为5,因此得到后面两维。将物品按name分组之后,dp[i][j][k]表示考虑前i个组,恰好选了j个物品且加成恰好为k,所能获得的最大分数(先不考虑加成)。状态转移极其简单,这里不赘述了,直接看代码。注意:设状态的时候一定要表明是恰好还是最多,这会导致初始

2020-11-15 23:45:05 176

原创 【模板】可持久化线段树 2(主席树)

分析:主席树板子代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞赛一场空,不开long long见祖宗 //typedef __int128 lll;#define print(i) cout << "debug: " << i << endsl#define close() ios::sync_with_stdio(0), cin.tie(0),

2020-11-15 19:30:31 127

原创 可持久化trie

AcWing256. 最大异或和给定一个非负整数序列 a,初始长度为 N。有 M 个操作,有以下两种操作类型:1、”A x”:添加操作,表示在序列末尾添加一个数 x,序列的长度 N 增大1。2、”Q l r x”:询问操作,你需要找到一个位置 p,满足l≤p≤rl≤p≤r,使得:a[p] xor a[p+1] xor … xor a[N] xor x 最大,输出这个最大值。输入格式第一行包含两个整数 N,M,含义如问题描述所示。第二行包含 N 个非负整数,表示初始的序列 A。接下来 M 行

2020-11-14 21:54:23 212

原创 [AcWing面向模型编程]线段树

线段树题目1(单点修改,区间最值):Acwing1275. 最大数给定一个正整数数列 a1,a2,…,ana1,a2,…,an,每一个数都在 0∼p−1 之间。可以对这列数进行两种操作:添加操作:向序列后添加一个数,序列长度变成 n+1;询问操作:询问这个序列中最后 L 个数中最大的数是多少。程序运行的最开始,整数序列为空。写一个程序,读入操作的序列,并输出询问操作的答案。代码:#include <bits/stdc++.h>using namespace std;

2020-11-10 22:24:57 177

原创 [AcWing面向模型编程]树状数组

题目1:243. 一个简单的整数问题2分析:presum[i]=sum1(i)∗(i+1)−sum2(i)presum[i] = sum1(i) * (i + 1) - sum2(i)presum[i]=sum1(i)∗(i+1)−sum2(i)sum1(i)是求差分ai的前缀和sum2(i)是求i * ai的前缀和维护两个前缀和代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//三年竞

2020-11-10 16:00:03 137

原创 I - Max answer 计蒜客 - 38228 单调栈

题目:I - Max answer 计蒜客 - 38228分析:这个题对于正数我们可以枚举最小值,求左右可扩展的最远处(用单调栈),贡献答案。对于负数的情况,可以结合“数组的最大子数组和"一题来考虑,即O(n)求子数组最大/小和。对于这个题,我们在维护MinSum的时候,同时维护对应区间的最小负数min,并利用min * MinSum贡献答案。代码:#include <bits/stdc++.h>using namespace std;typedef long long ll;//

2020-11-09 23:56:14 646

原创 2019ACM/ICPC上海网络赛 F Rhyme scheme

分析:思路:我们可以画一颗这样的树先。观察这一颗树,可以发现,每个结点如果按字典序安排子结点,那么叶子节点一定是从1~Bn的顺序。那么,随意观察一条路径,一个结点可以出现字母x当且仅当其祖先结点出现了字母x-1,也就是说,由第一层到当前层的出现字母的最大值为x或x-1,才可以在当前结点放x。如果我们将dp[i][j]表示成在第i层,已出现的最大字母为’A’+j-1,那么, 有状态转移方程dp[i][j] = dp[i+1][j]*j + dp[i+1][j+1].这个转移方程的含义是,在第i

2020-11-09 16:35:02 73

空空如也

空空如也

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

TA关注的人

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