随笔分类 - 板子
发表于 2024-04-20 03:41阅读:12评论:0推荐:0
摘要:倍增求lca struct edge{ int v,w; }; //思考:要想知道一个数有几个二级制位,直接n=__lg(x) //我们可以知道<n最近的2的次幂,9最大的是8,8虽然是2的3次方,但要遍历它的每一位 //需要3到0开始,也就是考虑到0的影响,我们可以正好满足偏移。 //2的3次方有
阅读全文 »
发表于 2024-01-29 23:09阅读:4评论:0推荐:0
发表于 2023-12-10 03:39阅读:9评论:0推荐:0
发表于 2023-12-10 03:29阅读:47评论:0推荐:0
摘要:树上启发式合并(常常也叫DSU On Tree,但其实和DSU并没有特别大关系),是一种解决某些树上离线问题的算法,尤其常被用于解决“对每个节点,询问关于其子树的某些信息”这样的问题。 假设我们要对树上的每个节点p求ans[p] ,且这个ans[p] 可以通过合并p的子节点的某些信息得知,一般来说我
阅读全文 »
发表于 2023-12-10 03:16阅读:6评论:0推荐:0
摘要:已知一棵包含 个结点的树(连通且无环),每个节点上包含一个数值,需要支持以下操作: 1 x y z,表示将树从 到 结点最短路径上所有节点的值都加上 。 2 x y,表示求树从 到 结点最短路径上所有节点的值之和。 3 x z,表
阅读全文 »
发表于 2023-12-10 03:02阅读:13评论:0推荐:0
摘要:N,M,S,分别表示树的结点个数、询问的个数和树根结点 理论时间复杂度上界就是O(2n+mlogn) const int N=500010; int n,m,s,a,b; vector<int> e[N]; int fa[N],son[N],dep[N],siz[N]; int top[N]; vo
阅读全文 »
发表于 2023-12-10 02:51阅读:3评论:0推荐:0
摘要:给定 n×n 的矩阵 A,求 A^k。 typedef long long LL; const int mod=1000000007; struct matrix{ LL c[101][101]; matrix(){memset(c, 0, sizeof c);} } A, res; LL n, k
阅读全文 »
发表于 2023-12-10 02:15阅读:6评论:0推荐:0
发表于 2023-12-10 01:54阅读:12评论:0推荐:0
摘要:最大异或和 给定一个非负整数序列 ,初始长度为 。 有 个操作,有以下两种操作类型: A x:添加操作,表示在序列末尾添加一个数 ,序列的长度 加 。 Q l r x:询问操作,你需要找到一个位置 ,满足 \(l \l
阅读全文 »
发表于 2023-12-10 01:31阅读:9评论:0推荐:0
发表于 2023-12-09 22:51阅读:9评论:0推荐:0
摘要:给定一个长度为 n 的整数数列,请你计算数列中的逆序对的数量。每个数字不超过1e9。 int n, m; int a[N]; int tr[N]; vector<int>lan; int lowbit(int x){ return x&(-x); } void discrete() { sort(l
阅读全文 »
发表于 2023-12-09 21:56阅读:6评论:0推荐:0
摘要:const int N = 1e5 + 10; int n, m; int a[N]; struct Tree{ int l,r; ll sum,add; }tr[4*N]; void build(int u,int l,int r){ // l=tr[u].l;r=tr[u].r; //注释掉的部
阅读全文 »
发表于 2023-12-09 16:58阅读:10评论:0推荐:0
摘要:维护一个字符串集合,支持两种操作: I x 向集合中插入一个字符串 ; Q x 询问一个字符串在集合中出现了多少次。 所有输入的字符串总长度不超过 ( 也就是节点数) const int N=100010; int n; char s[N]; int ch[N][26],c
阅读全文 »
发表于 2023-12-09 15:34阅读:13评论:0推荐:0
摘要:单哈希且用自然溢出代替取模操作,常数小但是容易被卡 单字符串区间内比较,查询子串hash值 typedef unsigned long long ULL; const int N = 100010, P = 131; int n, m; char str[N]; ULL h[N], p[N]; UL
阅读全文 »
发表于 2023-12-09 13:48阅读:68评论:0推荐:0
摘要:时间复杂度O(nm^2),理论上限 //n,m,s,t,分别代表该网络的点数n,网络的边数m,源点编号s,汇点编号t。 const int N=5010,M=100010,INF=1e8; int n,m,S,T; struct edge{int v,c,w,ne;}e[M]; int h[N],i
阅读全文 »
发表于 2023-12-09 13:25阅读:7评论:0推荐:0
摘要:时间复杂度为Θ(n^3) const int inf =0x3f3f3f3f; const int N=505; long long w[N][N]; long long la[N],lb[N]; bool va[N],vb[N]; long long match[N]; long long n,m
阅读全文 »
发表于 2023-12-08 22:20阅读:6评论:0推荐:0
摘要:假设 表示图中点数, 表示图中边数。 Prim算法堆优化 时间复杂度 。 核心思想:每次挑一条与当前集合相连的最短边。 code int ans,cnt; struct edge{int v,w;}; vector<edge> e[N]; int d[N
阅读全文 »
发表于 2023-12-08 22:10阅读:5评论:0推荐:0
摘要:const int N = 100010; int n,m,a,b; vector<int> e[N], tp; int din[N];//入度数组 bool toposort(){ queue<int> q; for(int i = 1; i <= n; i++) if(din[i]==0) q.
阅读全文 »
发表于 2023-12-05 00:56阅读:18评论:0推荐:0
摘要:https://www.luogu.com.cn/problem/P4316 本题暂时只写了用期望dp经典套路,套上期望DP的基本套路,设dp(u)为到达u点的期望长度。 期望dp,也叫概率dp 一般来说,期望dp找到正确的状态后,转移是比较容易想到的。 但一般情况下,状态一定是“可数”的 事实上,
阅读全文 »
发表于 2023-12-03 21:48阅读:4评论:0推荐:0
摘要:void floyd() { for (int k = 1; k <= n; k ++ ) for (int i = 1; i <= n; i ++ ) for (int j = 1; j <= n; j ++ ) d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
阅读全文 »