ICode9

精准搜索请尝试: 精确搜索
  • 倍增求lCA2021-02-21 10:02:23

    什么是LCA LCA(Least Common Ancestors),有一棵树,若结点z既是结点x的祖先也是结点y的祖先,且z的深度最大,那么称这个结点x是结点a,b的最近公共祖先。 倍增法是什么 其实求LCA,有一个极为朴素的方法,就是先比较两个结点的深度,然后dfs大的直到深度和小的一样,然后这两个结点一起dfs,

  • Codeforces Round #703 (Div. 2) F. Pairs of Paths2021-02-19 20:59:48

    题目链接 You are given a tree consisting of n n n vertices, and m m m simple vertex paths. Y

  • NC19814 最短路(LCA+思维)2021-02-17 19:33:43

    这题如果注意到m的范围,那么思路将会豁然开朗 因为如果是一棵树,那么直接lca就能求得两点间最小值 但是现在是图,并且边数就比一棵树大100左右 所以我们可以想到,先将图中取出生成树,用lca求答案 那么剩下就有100条边左右未使用,我们发现,答案可能经过这些边,因此我们枚举这些边的端点去做

  • 边分治学习笔记2021-02-16 20:02:25

    本文参考自:https://oi-wiki.org/graph/tree-divide/#_2 https://www.cnblogs.com/Miracevin/p/10739810.html 边分治:顾名思义就是对边进行分治 具体过程类似点分:就是找一条边将这棵树尽可能均匀的分成两半,然后分别递归 但是遇到菊花图就完蛋了 所以我们可以像线段树那样,建立

  • CF1051F The Shortest Statement2021-02-12 22:02:18

    题面传送门 zyq扒原题不要脸! 题目要我们求图上任意两点间最短路。 这个显然很难解决。 于是我们可以观察一下数据范围。 然后就可以发现一个奇怪的事情,最多只是生成树上加\(21\)条边。 考虑先随便搞出一棵生成树。然后对于这\(21\)条边强制走,剩下的生成树上lca即可。 然而,这道题z

  • About tarjan2021-02-11 22:34:48

    前言 tarjan 弄出来了 LCA 和 tarjan,这里主要讲了一下 tarjan(LCA 太简单了懒得写)。 关于 tarjan 大概就是强连通分量,缩点和割点,感觉挺有用的,学图论大概必备吧。 强连通分量 即在一个有向图中两个点可以互相到达,那么称这个图为强连通图。 说实话这个直接 tarjan 求就可以了。 tarj

  • 昔我往矣/树上乱搞/lca,树链剖分2021-02-11 10:33:24

    题目链接:https://acm.ecnu.edu.cn/contest/354/problem/A/   原做法:树上倍增+lca,可能生成树的时候复杂度太高,用的是类似并查集的合并方式。   oj上的大佬:https://acm.ecnu.edu.cn/contest/354/submission/2247258/《树链剖分+lca》 先补一个变量vector https://www.runoob.com/

  • LCA算法——倍增2021-02-02 20:03:39

    概况 LCA(Lowest Common Ancestors),即最近公共祖先,是指在有根树中,找出某两个结点u和v最近的公共祖先。 实现过程 预处理:通过dfs遍历,记录每个节点到根节点的距离dist[u],深度d[u] init()求出树上每个节点u的2^i祖先p[u][i] 求最近公共祖先,根据两个节点的的深度,如不同,向上调整深度大的

  • LCA-Tarjan离线+链式前向星2021-02-01 09:01:45

    LCA:最近公共祖先问题 解决方法:        1. 采用链式前行星存图,可以优化空间占用和遍历速度        2. Tarjan离线可以一次性处理所有的请求,时间复杂度为O(n+q)   下面简单介绍下Tarjan离线求LCA:       首先dfs遍历树,当某个结点左右子树都遍历完成后,处理所有与它有关的

  • [CF519E] A and B and Lecture Rooms - LCA2021-01-26 08:32:19

    [CF519E] A and B and Lecture Rooms - LCA Description 给定一棵树,有 \(m\) 组询问,每次给定两个点 \(u,v\),问到 \(u,v\) 距离相等的点有多少个。 Solution 一定是连接 \(u,v\) 的路径的中点以及它所发出的其它子树。 以下设 \(LCA(u,v)=l, MID(u,v)=c\)。 如果 \(l=c\),那么砍掉与

  • 洛谷3258 松鼠的新家2021-01-23 12:03:58

    题目大意 按给定顺序遍历一棵n个节点的树,求每个节点经过的次数。( 2 ≤ n ≤ 3 ×

  • [模板]LCA&LIS2021-01-23 12:02:07

    (LIS模板)AT2827 LIS 假设有序列s: dp[i]表示以s[i]为结尾的上升子序列的最大长度.O(N2),TLE #include <algorithm> #include <cstdio> #include <cstring> #include <iostream> using namespace std; int n, s[100010], dp[100010], ans; int main() { scanf("%

  • 最近公共祖先(lca)学习笔记2021-01-22 18:04:08

    什么是公共祖先? 祖先指的是树上结点的n到树的根结点路径上的所有除自身以外的所有结点都是结点n的祖先,包括根节点。 而公共祖先就是两个树上结点到根结点路径上的相同结点。   最近公共祖先: 两个树上结点i,j到根结点路径上的相同结点中,找一个结点k,使得i->k + j->k的和最小。   如

  • 「笔记」虚树2021-01-21 15:32:03

    写在前面 以前写的太简略了,重新来总结一下。 如果您是初学者建议配合阅读 虚树 - OI Wiki 上的图示阅读。 概念 对于树 \(T=(V,E)\),给定关键点集 \(S\subseteq V\),则可定义虚树 \(T'=(V',E')\)。 对于点集 \(V'\subseteq V\),使得 \(u\in V'\) 当且仅当 \(u\in S\),或 \(\exist x,y

  • P4565 [CTSC2018]暴力写挂 边分治+虚树2021-01-09 09:05:05

    题意: 戳这里 分析: 这道题是通道的弱化版,所以没什么好说的直接开始推柿子 我们发现存在两个 \(lca\) 边分治没法直接解决有根树过 \(lca\) 的路径,但是 \(dep(x)+dep(y)-dep(lca(x,y))\) 这个东西可以转化成 \(\frac{1}{2}\times (dep(x)+dep(y)+dis(x,y))\) 而 \(dis(x,y)\) 这种

  • [uoj576]服务调度2021-01-07 08:33:03

    先考虑一个子问题:仅有一个询问且无修改 对每一种颜色的贡献分类讨论,结论:最远的点一定这些点集中(任意一组)最远点对中的两个点(选择较远的一个) 证明:设$dis(x,y)$为$x$到$y$的距离,$deep_{x}$表示以$k$为根时$x$的深度 假设这个点集中最远点为$(x,y)$,而最深的点为$z$,且$deep_{z}$严格大

  • 刷题2021-01-01 13:30:07

    CF504E Misha and LCP on Tree 题:给出一棵 n n n结点的树,每个结点上有一个字符, ( x ,

  • [算法]LCA最近公共祖先(倍增法)2020-12-29 14:03:00

    #include<bits/stdc++.h> const int maxn = 500010; using namespace std; vector<int> g[maxn]; int par[20][maxn], dep[maxn], n, m, ml; //求每个点的深度,并初始化节点v的距离为2^0的父亲 void dfs(int v, int p, int d) { par[0][v] = p; dep[v] = d; for (int

  • 树分块小结2020-12-13 14:05:37

    其实就是一个简单的trick。网上我只找到了两道例题。 P6177 Count on a tree II/【模板】树分块 P3603 雪辉 说句闲话:我因为一个傻逼错误第一题从9:00调到11:45吃饭,12:00THUPC初赛。于是我非常困地开始了比赛,罚了我们队200min而且0输出。希望队友原谅我吧/kel P6177 Count on a tr

  • gym101741 C. Cover the Paths2020-12-10 22:33:41

    https://codeforces.com/gym/101741/problem/C 这题是受了18徐州的G题启发,在树上路径问题一般放到lca处讨论 那么这题想到路径lca就很好贪心了,我们随便选一个根节点,然后把每条路径的lca求出来,吧路径存在lca上 然后再按照dfs序的顺序处理,也就是说,我们处理一棵子树,必须把那些路径

  • LCA模板2020-12-08 22:03:45

    具体讲解可看:https://www.cnblogs.com/zhouzhendong/p/7256007.html LCA_Tarjan Tarjan 算法求 LCA 的时间复杂度为 O((n+q)α(n)) ,是一种离线算法,要用到并查集。 #include <bits/stdc++.h> using namespace std; const int N=40000+5; struct Edge{ int cnt,x[N],y[N],z[N

  • Luogu P4074 [WC2013]糖果公园 题解2020-12-08 19:58:09

    这道题可以说是一道树上带修莫队的板子题。虽然评级是黑的,但是树上带修莫队本身还是比较好想的。就是代码很难调。 树上莫队: 树上莫队的本质就是利用欧拉序将树上莫队问题变成序列莫队问题。 我们设 { e

  • P4281 [AHOI2008]紧急集合 / 聚会2020-12-06 17:06:08

    题目描述 欢乐岛上有个非常好玩的游戏,叫做“紧急集合”。在岛上分散有N个等待点,有N-1条道路连接着它们,每一条道路都连接某两个等待点,且通过这些道路可以走遍所有的等待点,通过道路从一个点到另一个点要花费一个游戏币。 参加游戏的人三人一组,开始的时候,所有人员均任意分散在各

  • [CF191C] Fools and Roads - LCA,树上差分2020-12-04 12:02:37

    Description 有一颗 \(n\) 个节点的树,\(k\) 次旅行,问每一条边被走过的次数。 Solution 模板题,复习一下 LCA 与树上差分的基本用法。 首先,对于每条边被走过的次数,我们把它转化为深度较大的那个点被经过的次数。 对于每一次旅行 \(begin,end\),计算 \(lca=LCA(begin,end)\),则每次操

  • 【LCA+树上差分】P3258 [JLOI2014] 松鼠的新家2020-11-25 23:00:31

    3631: [JLOI2014]松鼠的新家 Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1727  Solved: 834[Submit][Status][Discuss] Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯

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

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

ICode9版权所有