自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Zenith_Habitant的博客

虽千万人,吾往矣!

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

原创 Codeforces数据结构刷题

题目链接:https://codeforces.com/problemset/problem/1439/C解题思路:本题通过简单分析,发现一操作可以分解为线段树上二分和区间修改,而操作只需要暴力处理一下即可//#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define sz(a) (int).

2020-12-13 18:45:51 366

原创 Codeforces动态规划刷题

题目链接:https://codeforces.com/problemset/problem/1399/F解题思路: 首先肯定是需要离散化线段。离散完了之后我们考虑区间dp,定义dp[i][j]:[i,j]这段区间内最多的合法线段数量。定义dp[i][j]:[i,j]这段区间内最多的合法线段数量。定义dp[i][j]:[i,j]这段区间内最多的合法线段数量。那么显然有转移方程dp[i][j]=max(dp[i][j−1],dp[i+1][j])dp[i][j] = max(dp[i][j-1], .

2020-11-30 22:05:56 330

原创 Codeforces图论刷题

题目链接:https://codeforces.com/problemset/problem/1439/B解题思路:很容易想到和拓扑排序类似的思路,删点判断答案。关键在于如何判断度数为k-1的完全图,这个地方只需要再每次删点之前判断一下就好了//#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a)).

2020-11-21 17:00:05 259

原创 汇编小程序

交换双字变量的高低16位。

2024-05-22 17:10:16 342

原创 2021-06-24

退役了,退役了

2021-06-24 15:45:35 196

原创 学习计划----数位DP

题目链接:https://www.luogu.com.cn/problem/P2657解题思路:数位DP模板题,按位进行记忆优化搜索,详情见代码const int N = 15;int len;string L , R, v;ll dp[N][N][2][2];//cur表示当前位,x代表上一位填的什么//f表示从[0,cur-1]前缀是否和给定上界相同//g表示是否还在填充前导0ll dfs (int cur ,int x, bool f, bool g){ if (cu.

2021-05-13 22:23:43 238 1

原创 复习计划——主席树

主席树三类经典应用:区间Mex区间种类数区间第K大一.区间Mex题目链接: https://www.luogu.com.cn/problem/P4137解题思路: 对于主席树,我们维护一颗权值线段树,并且用来记录每一个数最后出现的位置。为什么这样做呢?例如现在有序列[3,1,0,2,?,?][3,1,0,2,?,?][3,1,0,2,?,?],那么对于主席数来说我们维护[1,4][1,4][1,4]的序列,主席树内容为[3,2,4,1,0,0][3,2,4,1,0,0][3,2,4,1

2020-12-29 23:12:00 236

原创 学习计划——根号分治

根号分治根号分治是一种思想,一般根据一个数(可以是数组的数,也可以是答案的数)分类,分为大于sqrt(n)sqrt(n)sqrt(n)的部分和小于等于sqrt(n)sqrt(n)sqrt(n)的部分题目链接: luogu.com.cn/problem/P3396解题思路: 根号分治的经典题目。我们根据模数分类,模数大于等于sqrt(n)sqrt(n)sqrt(n)的部分我们暴力求解,小于等于的部分我们提前预处理出来就好了const int N = 2e5 + 5;int n , m

2020-12-14 14:22:29 741

原创 树链剖分——复习计划

树链剖分应用一.题目链接: https://codeforces.com/problemset/problem/1403/B解题思路: 该题需要考虑每条边给答案带来的贡献,通过简单的画图和思考我们可以发现,当一个节点下有偶数个叶子节点时,该节点到父亲节点的边的贡献为2,若为奇数则为1,那么最后的答案为N−2+sigma(du[i]mod2==0)N-2+sigma(du[i]mod 2==0)N−2+sigma(du[i]mod2==0),利用树链剖分维护即可int n, q, rt, sum

2020-11-30 11:16:59 119

原创 2018-2019 ACM-ICPC, Asia Seoul Regional Contest——刷题计划

解题思路: 本题研究一下数据就可以发现,可以无视矩形,只看平行于y轴的边一条边即可,于是我们可以把这个题目转换为,两条直线和若干条线段相交的问题。我们设直线为y=a,y=by=a,y=by=a,y=b我们枚举aaa ,y=ay=ay=a 相交了多少条线段,可以通过差分直接求出。然后我们将a经过的线段全部删除,在剩下的数组中找到最大的与y=by=by=b相交的线段数即可。这里我们倒叙枚举端点,使用线段树来维护寻找y=by=by=b相交多少条线段的过程。//#define LOCAL#include .

2020-11-24 21:12:27 380

原创 CDQ分治——学习笔记

CDQ分治cdq分治的原理基于以下事实:对于每个“查询”操作,其结果ans[i]=[1,i−1]ans[i] = [1,i-1]ans[i]=[1,i−1]中所有修改对其造成影响的叠加(这里的“叠加”需要能够比较方便的维护,例如sum/min/maxsum/min/maxsum/min/max等)定义solve(l,r)solve(l,r)solve(l,r)为:对于第kkk个操作,k∈[l,r]k∈[l,r]k∈[l,r],若其为查询操作,则计算[l,k−1][l,k-1][l,k−1]中的修改

2020-11-24 16:04:16 157

原创 二维偏序/数点——学习笔记

二维偏序/数点对于可离线的二维偏序问题一般都是先定一维的顺序,然后利用树状数组维护求解应用一.题目链接:https://www.luogu.com.cn/problem/P2163解题思路:二维数点的经典模板题,离线询问之后利用二维前缀和方法用树状数组维护即可//#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(

2020-11-23 19:36:51 1275

原创 点分治——学习笔记

点分治点分治基础框架(常用于树上路径问题)找1个合适的分治中心rt统计答案ans += solve(T,rt)对所有rt的子节点v,递归调用work(v)int work(u){//统计sub(u)中的合法路径 rt = find_rt();//找重心 ans = solve(rt); for v∈son[rt]: ans += work(v) return ans;}模板例题:一.题目链接: https://www.luo

2020-11-19 09:37:13 161

原创 01Trie——学习笔记

01Trie01Trie01Trie01Trie与字典树几乎一样,只不过边的权值只有0或101Trie常用来解决异或问题例题:一.题目链接:https://www.luogu.com.cn/problem/P4551解题思路:首先意识到异或的前缀性质假设:S3=A1xorA2xorA3S3 = A1xorA2xorA3S3=A1xorA2xorA3,S1=A1S1 = A1S1=A1, 那么 S2=S3xorS1S2 = S3xorS1S2=S3xorS1那么我们将这条性质用在树上,我

2020-11-16 16:09:48 276

原创 启发式树上主席树合并、克鲁斯卡尔重构树 学习笔记

题目链接:https://www.luogu.com.cn/problem/P3302启发式主席树合并基础题目,和启发式并查集方法保持一致,按秩合并即可,该主席树维护的是根节点到树上任意节点的内容,和 count on tree这个题目维护的内容一样,只是在这个题目的基础上加上了启发式合并//#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b).

2020-11-12 15:19:32 228

原创 CF1422D Returning Home

题目链接:https://codeforces.com/problemset/problem/1422/D稍微思考一下可以很直接的得到,最后的答案无非两种情况:从瞬移点普通的走到终点从起点普通的走到终点由此我们可以转换问题,我们只需要求出起点到所有瞬移点的最小距离就好了这里可以发现,从一个点到一个点和两个点之间纵坐标,横坐标的差值相关,这里我们把每个点拆成3个,一个点代表瞬移点的横坐标,一个点作为瞬移点的纵坐标,然后横纵坐标都链接瞬移点。瞬移点链接终点,起点链接瞬移点横坐标,瞬移点纵坐标,.

2020-11-12 11:09:24 256

原创 CodeForces 1423H Virus

题目链接:https://codeforces.com/problemset/problem/1423/H这个题目,显而易见的需要可撤销并查集,然后发现,每条边有一个存在时间,我们只需要处理出这个存在时间,那么这个题目就可以使用线段树分治+可撤销并查集来维护。当然这个地方的时间与操作数量对等,而不是天数,如果是天数的话,处理询问会存在很大的麻烦,读者可以自己思考一下,但是如果这里以操作顺序为时间轴,那么就会简单很多,不会存在加边和查询的先后问题//#define LOCAL#include &lt.

2020-11-11 23:40:04 230

原创 codeforces Yet Another DAG Problem

题目链接:https://codeforces.com/contest/1430/problem/G这个题目可以采用状态压缩DP求解,最简单的是O(n*3^n)的暴力状态压缩DP,但是复杂度是不允许的,优化的也不会。这里参考了这篇博客,采用了最小割的建模方式,求解这个题目(https://www.luogu.com.cn/problem/solution/CF1430G)这里提供一个O(n*3^n)的状态压缩DP//#define LOCAL#include <bits/stdc++.h&.

2020-11-10 23:25:46 177

原创 CCPC长春站 2020部分题解

Strange Memory本题采用DSU On Tree + 拆位,这个题目采用启发式合并很容易想到,关键是如何加速计算贡献的过程,首先,遍历每一个点然后寻找前缀树中对应的点是必不可少的,但是这里,我们可以开一个数组A[X][Y][Z],前缀树中,设一个点的编号为ID,则数组表示在前缀树中所有权值为X的编号中第Y位为Z的数量,这样的话,我们只需要对遍历到的点进行二进制拆位,检查前缀树中0/1的数量便可以加速计算贡献的过程了//#define LOCAL#include <bits/stdc.

2020-11-10 15:47:10 658

原创 CF1442C Graph Transpositions 分层图

题目链接:https://codeforces.com/problemset/problem/1442/C解题思路:发现当反转18次的时候,代价是超过最大的m的,所以分开讨论,首先计算出从起点到达终点最少需要多少次反转,如果超过18次,按最少次数转移,同时计算出最少次数下的最短路,当小于18次时,这个时候,所需要的所有代价不会超过long long(所以取模后不会丢失大小关系),所以可以直接使用dijkstra求解//#define LOCAL#include <bits/stdc++.h&.

2020-11-06 15:12:33 312

原创 CF1444C Team-Building 可撤销种类并查集

思路:该题很容易想到,暴力枚举子图,然后二分图判定,统计答案即可,但是复杂度太高。正难则反,我们考虑用所有方案减去不合法方案。不和法方案分为两种:- 如果一个环为奇环,并且只有一种颜色,那么所有和他构成的偏序集都是不合法的- 如果一个环奇幻,并且环内由两种颜色构成,那么由这两种颜色构成的偏序集是不合法的对于第一种情况,利用并查集可以很快的判断出来。第二种情况只需要先将图进行一些处理,先将所有相同颜色的边利用并查集构成连通块,这个时候利用的是连接相同颜色的边。然后再将连接不同颜色的边分组。.

2020-11-02 16:41:27 632

原创 复习计划—双连通分量

题目连接:https://www.luogu.com.cn/problem/P3388技巧:割点模板题//#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define sz(a) (int)a.size()#define INF 0x3f3f3f3f#define DNF 0x7f#de.

2020-10-31 14:32:36 226

原创 P5787 线段树分治+可撤销并查集

题目链接:https://www.luogu.com.cn/problem/P5787解题技巧:1.对于此类在某一段时间**[L,R]**内产生贡献的非强制在线问题,我们都可以试着采用线段树分治解决//#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define sz(a) (int)a.s.

2020-10-23 21:05:48 200

原创 学习笔记--网络流24题(下)

题目链接:https://www.luogu.com.cn/problem/P3355技巧:对于棋盘类的题目,考虑黑白染色构图,需要分析同类型颜色之间是否存在互相影响的关系(是否能建边),如果同种颜色之间不存在任何关系,则满足二分图定义,朝着最小覆盖,最大独立集思考即可。本题是求最大独立集//#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) me

2020-10-22 15:20:11 116

原创 可撤销并查集+MST思想-Codeforces891C

可撤销并查集,采用启发式按秩合并struct Undo_Dsu{ stack <pii> st ; int fa[N] , siz[N] ; void init() { while(!st.empty()) st.pop() ; for (int i = 1 ; i <= n ; i ++) fa[i] = i , siz[i] = 1 ; } int findroot(int x) { .

2020-10-15 22:54:20 3551

原创 学习笔记--网络流24题(上)

题目链接:https://www.luogu.com.cn/problem/P1251技巧:本题将每个天拆分为两个阶段 (白天,晚上)每天晚上会收到脏餐巾(来源:当天早上用完的餐巾,在这道题中可理解为从原点获得),每天早上又有干净的餐巾(来源:购买、快洗店、慢洗店)。//#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,si

2020-10-15 12:50:13 2096

原创 学习计划——整体二分

整体二分一般适用与可离线询问的问题,属于离线算法可以使用整体二分解决的题目需要满足以下性质:询问的答案具有可二分性修改对判定答案的贡献互相独立 ,修改之间互不影响效果修改如果对判定答案有贡献,则贡献为一确定的与判定标准无关的值贡献满足交换律,结合律,具有可加性题目允许使用离线算法经典问题:P3834,区间第k大//#define LOCAL#include <bits/stdc++.h>using namespace std;#de.

2020-10-09 13:24:33 415

原创 Big-Small (根号分治) 学习笔记

Big−SmallBig-SmallBig−Small 算法一般对度数进行分治,其时间复杂度可以规约为sqrt(m)sqrt(m)sqrt(m)级别经典例题:P1989三元环计数问题//#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define sz(a) (int)a.size()#defin

2020-10-06 22:23:39 508

原创 复习计划-01分数规划

啦啦啦啦

2020-09-26 10:22:00 108

原创 环套树

P1453先把环处理出来,然后对环上每个节点树形DP,然后环形DP就好//#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define sz(a) (int)a.size()#define INF 0x3f3f3f3f#define DNF 0x7f#define DBG printf(".

2020-09-24 11:06:11 212

原创 复习计划-强连通分量

强连通分量

2020-09-15 20:17:27 143

原创 复习计划-线段树

线段树

2020-09-11 10:42:05 144

原创 复习计划-状态压缩DP

状态压缩DP观察数据范围提取题目中状态关系设计状态转移方程-代码套路先计算出所有合法状态再根据情况处理出所有合法状态可以转移到的合法状态经典例题 (棋盘式)SGU223//#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define sz(a) (int)a.size()

2020-09-10 12:27:31 146

原创 复习计划-单调栈

性质1针对每个数,寻找它和它左 / 右边第一个比它大 / 小的数的值,以及相距多少个数代表题:LuoGuP2866//#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define sz(a) (int)a.size()#define INF 0x3f3f3f3f#define DNF 0x

2020-09-09 13:16:35 108

原创 牛客多校第七场 A National Pandemic

算是一个小技巧吧,所有题目在给定或者求出计算公式之后,都可以去朝着把恒定的值或者成对出现的值单独拿出来维护比如这个题 w - dis(x,y) = w - dep[x] - dep[y] + w * dep[LCA(x, y)] ,我们就会发现 w - dep[x] 为定值 , dep[y]可以通过维护次数那么重点在于dep[LCA(x,y)],这个地方是一个小技巧,我们可以通过修改根到x的路径上的每一条边,使得每条边权值+1,然后在维护答案的时候,query一下根到x的路径上的和就好了。具体.

2020-09-03 22:00:35 163

原创 牛客多校第四场 Ancient Distance

//#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define sz(a) (int)a.size()#define INF 0x3f3f3f3f#define DNF 0x7f#define DBG printf("this is a input\n")#define fi first#.

2020-09-02 12:05:52 139

原创 牛客暑期多校训练营第一场 Infinite Tree

//#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define sz(a) (int)a.size()#define INF 0x3f3f3f3f#define DNF 0x7f#define DBG printf("this is a input\n")#define fi first#.

2020-08-31 22:40:10 140

原创 CF1009 长链剖分优化树形DP或线段树合并

//#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define sz(a) (int)a.size()#define INF 0x3f3f3f3f#define DNF 0x7f7f7f7f#define DBG printf("this is a input\n")#define fi f.

2020-08-30 09:54:48 212

原创 动态开点权值线段树

动态开点权值线段树其实不用离散化,也不用关注负数,因为和负数没关系了//#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define sz(a) (int)a.size()#define INF 0x3f3f3f3f#define DNF 0x7f7f7f7f#define DBG prin

2020-08-24 13:09:58 352

原创 Splay普通平衡树模板

//#define LOCAL#include <bits/stdc++.h>using namespace std;#define ll long long#define mem(a, b) memset(a,b,sizeof(a))#define sz(a) (int)a.size()#define INF 0x3f3f3f3f#define DNF 0x7f7f7f7f#define DBG printf("this is a input\n")#define fi ..

2020-08-22 22:14:05 181

空空如也

空空如也

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

TA关注的人

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