ICode9

精准搜索请尝试: 精确搜索
  • 浅谈差分2022-07-26 08:33:28

    1.前言 前置芝士: 同步于 \(luogublog\) 发布。 基本树上操作,lca。(用于树上差分。) 如有错误,欢迎各位大佬指出。(顺便复习一下远古算法。) 2.什么是差分 我们先给定一个数组 \(a\),长度为 \(n\),我们可以构造一个差分数组 \(b\),使得对于任意的 \(i(1\le i \le n)\),\(\displaystyle\sum

  • LCA 返回最近公共祖先:预处理2022-07-25 15:05:17

    三种祖先关系 a是b祖先 b是a祖先 a和b不是祖先关系 必备:知道根节点 必须存下来 有可能跳过根节点 int depth[N],f[][N];//N为(log节点数)+1 int q[N]; 从根节点开始预处理; 需要设置0号点为哨兵 询问 p=lca(a,b) 向上标记法on:从一个点向根节点遍历标记公共祖先 ,然后另一个点也向上走

  • 论求 $lca$ 最有效的方法是2022-07-23 11:34:18

    目录 \(standard\_table\) : 欧拉序 + \(ST\) 表 \(multiplication\) : 倍增 \(tree_chain_subdivision\) : 树链剖分 #include<bits/stdc++.h> using namespace std; const int N=5e5+5; inline int read(){ int x=0,f=1;char ch=getchar(); while(!isdigit(ch)){if(c

  • $\text{All LCA}$2022-07-23 11:31:27

    \(1.Multiplication\) \(2.Treediv\) \(3.Euler+ST\) #include <bits/stdc++.h> using namespace std; const int N = 5e5 + 5; int n, m, S; vector <int> Link[N]; namespace solve1 { int f[N][25], dep[N]; void dfs(int u, int Fa) {

  • P1600 天天爱跑步 题解 Treap启发式合并2022-07-22 08:31:39

    仔细看了题解区里面好像平衡树的解法写的不太清楚,网上资料更是寥寥无几,经过自己的摸索之后,我尽量写一篇清楚的题解。 统一变量 设路径 \(i\) 的起点和终点为 \(s_i\) 和 \(t_i\), 长度为 \(dis_i\),起点和终点的lca为 \(lc_i\). 节点 \(i\) 深度为 \(d_i\). 推柿子 像其他题解所说

  • 最近公共祖先(倍增LCA)2022-07-21 19:01:41

    题目 最近公共祖先 描述 给定一棵树,请查询结点u和v的最近公共祖先。最近公共祖先,就是两个节点在这棵树上深度最大(离根结点最远)的公共的祖先节点,结点的祖先也可以是自身。 输入 输入数据第一行为结点个数n(n<=900),接下来有n行,每行格式如下: x m y1, y2, ... ym 表示结点x有m个孩子y1,

  • 2022.7.18 做题记录2022-07-19 01:31:50

    Luogu3863 序列 Future 7.0 给定一个长度为 \(n\) 的序列,给出 \(q\) 个操作,形如: \(1~l~r~x\) 表示将序列下标介于 \([l,r]\) 的元素加上 \(x\) (请注意,\(x\) 可能为负) \(2~p~y\) 表示查询 \(a_p\) 在过去的多少秒时间内不小于 \(y\) (不包括这一秒,细节请参照样例) 开始时为第 \(0\)

  • 【LCA】【施工中】2022-07-17 14:02:25

    #include <bits/stdc++.h> using namespace std; const int N = 5e5 +5; int h[N],ne[N<<1],e[N<<1],fa[N<<1][22],lg[N<<1],dep[N],idx,n,m,s; inline void add(int x,int y){e[++idx] = y,ne[idx] = h[x];h[x] = idx;} void dfs(int u,int

  • 一通乱学【树问题相关】2022-07-16 17:34:59

    只要我什么都不会,一道题就可以快乐学习一下午( 货车运输 蓝题 题目描述 A 国有 \(n\) 座城市,编号从 \(1\) 到 \(n\),城市之间有 \(m\) 条双向道路。每一条道路对车辆都有重量限制,简称限重。 现在有 \(q\) 辆货车在运输货物, 司机们想知道每辆车在不超过车辆限重的情况下,最多能运多重

  • LCA模板2022-07-11 20:31:36

      拿来存一下lca模板,想知道原理的话出门洛谷~ #include<bits/stdc++.h> using namespace std; const int maxn=500007; int cnt=0,head[maxn],fa[maxn][40],dep[maxn],lg[maxn]; struct lys{ int from,to,nex; }e[maxn*2]; void add(int from,int to){ cnt++; e[cnt

  • LCA最近公共祖先2022-07-09 11:36:51

    最近公共祖先就字面意思,两个节点一起往上跳,找到的最近的公共点 找到u和v第一个不同祖先不同的位置,然后这个位置向上走一步就是最近公共的祖先 但是想找到u,v第一个不同祖先的位置,就要保证u,v在同一深度(才能一起往上移动) 所以这个过程分为三部分,   1. 预处理找到每个节点深度  

  • 树的dfs序2022-07-08 13:00:15

    二叉树 对于一颗二叉树,它有三种遍历方式:前序、中序、后序 这三种顺序其实都有使用的场景(主要是在分治算法中考虑是递归前,递归进行中,递归后)的区别。 多叉树 在多叉树里面,常用的dfs序其实也有三种:dfs序、扩展dfs序、欧拉序 dfs序类似二叉树的先序遍历 扩展dfs序类似二叉树的先序+中

  • 洛谷P8201 生活在树上(Hard Version) 题解2022-07-06 21:36:25

    题目链接:P8201 生活在树上(hard version) 题意 给定一个点带权的树,点数为 \(n\),第 \(i\) 个点的权值为 \(w_i\)。 定义两点之间的路径为路径上所有点的点权的按位异或和,即 \(dis(a,b)\)。 现在有 \(m\) 次询问,每次询问给定三个数 \(x,y,k\),问是否存在 \(t\),使得 \(dis(t,x)\oplus di

  • 图论练习2022-07-06 11:41:53

    目录CF888G Xor-MST CF888G Xor-MST 题意: 给定 \(n\) 个结点的无向完全图。每个点有一个点权为 \(a_i\)。连接 \(i\) 号结点和 \(j\) 号结点的边的边权为 \(a_i\oplus a_j\)。 求这个图的 最小生成树 的权值。 \(1\le n\le 2\times 10^5\),\(0\le a_i< 2^{30}\)。 思路: 看到异或,

  • 洛谷-P3379 【模板】最近公共祖先(LCA)2022-07-02 19:02:14

    【模板】最近公共祖先(LCA) 倍增 lca 模板 真心觉得二进制太奇妙了 #include <iostream> #include <cstdio> #include <algorithm> #include <vector> using namespace std; #define endl '\n' const int maxn = 5e5 + 10; vector<int>gra[maxn]; int fa[maxn

  • 最近公共祖先(LCA)(RMQ)2022-07-01 13:07:39

    最近公共祖先(LCA)(RMQ) 作为求LCA的常见方法之一,RMQ算法可以以O(nlogn)的复杂度初始化,然后以O(1)的复杂度进行查询。RMQ(Range Minimum/Maximum Query)意为区间最值查询,即查找区间[l,r]中元素的最大/小值。但今天讨论的算法是有关树的,因此我们要想办法把树转换成一个满足我们需求

  • LCA(倍增)2022-06-25 08:31:06

    inline void dfs(int u, int f) { fa[u][0] = f; dep[u] = dep[f] + 1; for(int i = 1; i <= 26; ++i) fa[u][i] = fa[fa[u][i - 1]][i - 1]; int v; for(int e = hd[u]; e; e = nt[e]) if((v = to[e]) ^ f) dfs(v, u); } inline int LCA(int u, int v) { if(dep[u] < d

  • LCA模板2022-06-20 13:31:56

    倍增算法 类似二分思想 用fa[i][j]表示第i个数的第2^j个祖先 用dep[x]是第x的深度 每次对于两个节点 将深一点的点跳到和浅一点的同一个位置 然后再将两个点同时跳到同一个点 跳的时候跳以2的倍数跳 //预处理fa数组和de数组 //fa[i][j]第i个节点的第2^j个祖先 de[x] x的深度 void

  • 【题解】 洛谷 P4810 [COCI 2014/2015 #3]STOGOVI2022-06-14 08:32:26

    感觉这题思路挺妙的。 历史版本操作?这很主席树。想了半天不知道咋搞,毕竟主席树是维护值域的,这下标操作很难办呐,一看题解,woc,lca? 这题的基本思路是对操作建树,具体怎么建呢? 对于每一个入栈操作 \(a\ \ v\),考虑将新加入的数字 \(i\) 作为 \(v\) 的儿子,这样就可以做到从根节点向下,每一

  • BalticOI2017 Railway2022-06-04 20:31:44

    看了一眼网上的题解,好像我的做法没有出现(?),并且我的做法好像比较简单易懂(?),不用虚树也不用线段树维护 不难想到,我们可以对于每个副部长的点连成的最短路径(即这个路径里的每条边都是必要的)上+1,然后看有哪些路是\(>=k\)的,但是我们需要不重复不遗漏的把这个路径都走到。于是我们考虑把这

  • LCA学习笔记2022-05-28 16:35:43

    目录 前言 LCA简介 倍增求LCA 树剖求LCA LCA在树形结构题中的妙用 1.前言 应老师要求,来写一篇关于LCA的学习笔记 2.LCA简介 两个节点的最近公共祖先,就是这两个点的公共祖先里面,离根最远的那个。 画张图理解一下: 如图,10与8的LCA是2,13与3的LCA是3 那么怎么求LCA呢? 3.倍增求LCA 想

  • 仓鼠找 sugar2022-05-25 22:01:58

    仓鼠找 sugar LCA SCUACM2022集训前训练-图论 - Virtual Judge (vjudge.net) 首先要观察出一个结论:若 a - b 的路径与 c - d 的路径相交,设 a, b 的 LCA 为 x; c, d 的 LCA 为 y 则有 x 在 c - d 路径上 或 y 在 a - b 路径上 如何判断一个点是否在一条路径上: 可观察到一个性质

  • 题解-AHOI2022 钥匙2022-05-20 19:03:35

    通过这道题发现我是春春的滴嫩儿。 前两题一共花了我4.5h,也就是说我要去AH的话切完前两题比赛就结束了后面的题看都没得看。 还是要加强码力和熟练度啊。 首先考虑对每种颜色分别求解,那么我们可以把钥匙和宝箱看成一个括号匹配(怎么又是它),考虑在匹配的位置记入答案。那么可以枚举

  • 可持久化2022-05-18 20:32:35

    乱写一气。 可持久化线段树 P3402 可持久化并查集 按秩合并,将并查集的 \(\mathrm{fa}\) 和 \(\mathrm{size}\) 数组可持久化。时间 \(\mathcal{O}(n+m\log^2 n)\)。 P3293 [SCOI2016] 美味 从高位到低位确定答案,对每一位都在可持久化线段树上二分一下。时间 \(\mathcal{O}(n\log n

  • LCA2022-05-14 15:32:13

    最近公共祖先 LCA dfs向上标记-O(n) 点A先向根搜索并标记,点B再向上搜索,第一次碰到的标记即是lca。 复杂度On,不常用 倍增法-O(logn) dep[i]表示点i的深度 up[i,j]表示从i开始向root方向走2^j步数能走到的位置 若从i开始向根跳2^j次会跳出根则up[i,j]=0,dep[0]=0 具体过程: 【1】先让

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有