本篇博客是关于洛谷题单【图论2-1】基础树上问题 的题目题解合集 紫题还不会,先鸽 同时附加一点我的个人学习心得 基础树上问题 除了 树形dp 外,还有 树的直径 和 LCA 等问题 树的直径 树的直径即树上最长路的长度 求法是首先任取一点作为根,求出一个到根最远的点,此为直径的一端;再以
瓶颈生成树 定义无向图G,G的瓶颈生成树是一棵 “ 树上最大边权值在G的所有生成树中最小 ” 的生成树,这样的生成树可能不止一棵。瓶颈生成树的值为树上最大边权值。 由瓶颈生成树的定义可知:最小生成树是瓶颈生成树的充分不必要条件,即最小生成树一定是瓶颈生成树,瓶颈生成树不一定是最
<H3C>sysSystem View: return to User View with Ctrl+Z. [H3C]probe[H3C-probe]?Probe view commands: INTEGER<0-1> Switch NO bcm BCM [H3C-probe]bcm slot 1 chip 0 vBroadcom Command Monitor: Copyright (c) 1998-2010 Broadcom C
简介 LCA(Lowest Common Ancestor) 中文名是最近公共祖先。两个节点的最近公共祖先,就是这两个点的公共祖先里面,离根最远的那个。 LCA问题的求解有多种方法,如:倍增、Tarjan、树链剖分 、欧拉序列转化为 RMQ再求解,但我只会倍增。 倍增求LCA: 实现: 我们可以定一个 \(lca[x][k]\) 为表示
更新记录 转载请注明出处:https://www.cnblogs.com/cqpanda/p/16587354.html 2022年8月16日 发布。 2022年8月13日 从笔记迁移到博客。 ExtJS教程汇总:https://www.cnblogs.com/cqpanda/p/16328016.html 说明 Ext.container.ButtonGroup(按钮组),按钮组的xtype为'buttongroup' 实例:
A. 暗之链锁 翻书就好了,在树上差分的第一个例题,书上讲得太好了感觉我写啥都是多余。Cat本来可以1A的,结果把m看成了树边和非树边总共有m条,算贡献的时候算成了n-m...过样例的的时候读入错了我就发现了这个问题,结果改了一处没改第二处…… 有大佬说能用树链剖分+线段树,我懒了就没试,我
传送门 思路 如果没有强制,那就是一个简单的树形DP,我们用 \(f[i][0/1]\) 表示 \(i\) 的子树内,\(i\) 选或不选的最小代价;用 \(g[i][0/1]\) 表示整个树减去 \(i\) 的子树,\(i\) 选或不选单最小代价。这类似于换根DP 有了强制,说明我们的DP有一些状态不可取,虽然我们不能退回去再做一次D
【算法学习笔记】04 最近公共祖先LCA 原理 顾名思义,就是求两点的最近公共祖先(自己也是自己的祖先)。 也就是两点在走到根节点的路径上最先遇到的共同的点。 向上标记法 比较贴定义的原始方法。 一点先向 \(root\) 走,走过的点标记一下;然后另一点也往 \(root\) 走,走到的第一个被标记
文章来源:https://www.jianshu.com/p/2475c3240a67 简化的短序列匹配程序 (map.py) 把short.fa中的序列比对到ref.fa, 输出短序列匹配到ref.fa文件中哪些序列的哪些位置。 f1 = r'E:\Bioinformatics\Python\practice\chentong\notebook-master\data\short.fa' f2 = r'E:\Bio
Atcoder 题面传送门 打个表发现答案等于每条边被覆盖的次数与 \(2\) 取 min 之和,考虑如何构造这个上界。 首先考虑树是以 \(1\) 为中心的菊花图,且任意 \(A_i,B_i\ne 1\) 的做法:我们考虑在 \(A_i,B_i\) 之间连边。那么发现限制等价于,对每条边定向使得每个度 \(\ge 2\) 的点至少有一
001、 fasta序列迭代 (base) root@PC1:/home/test2# cat a.fasta ## 测试fasta文件 >gene1 myc AGCTGCCTAAGC GGCATAGCTAATCG >gene2 jun ACCGAATCGGAGCGATG GGCATTAAAGATCTAGCT >gene3 malat1 AGGCTAGCGAG GCGCGAG GATTAGGCG >>> import pyfastx
问题如题目所示。 方法有很多,本文说三种: 树上倍增/LCA魔改 O(n logn) 预处理得到fa数组,倍增向上跳跃,求祖先即可。 int fa[N][21],dep[N]; void dfs_lca(int u,int father){ dep[u]=dep[father]+1; fa[u][0]=father; for(int i=1;(1<<i)<=dep[u];i++) fa[u][i]
很抱歉这篇博客晚来了(该放在Kruskal前面的)...... 并查集,故名思意,就是用来高效进行合并、查询集合的数据结构,为了方便,我们可以把每一个结点看成树形结构即可。 1.查询 Q1:我们该如何查询某一个结点在哪一个集合呢? A1:我们知道如果需要区分开所有集合,就应该用一个代表来表示这个集合
题目链接:https://acm.hdu.edu.cn/showproblem.php?pid=7192 LCT维护一下fail树形态,询问时把删除部分和没有被删除的部分交线附近暴力匹配一下。 #include<bits/stdc++.h> #define N 400009 using namespace std; typedef long long ll; char s[N],s1[N]; int n,q; int ch[N][26],s
https://codeforces.com/contest/1713/problem/E 写了个随机合并的并查集,,,没过。。。。。。 反手按秩!!!!!!!!! #include <bits/stdc++.h> //#define int long long #define ID(i,j) ((i-1)*n+j) #define pb push_back using namespace std; const int M=1002,N=(int)(2e6+5); int n,a[M][M
link。 好题啊。 首先有一个类 kruskal 暴力,就是对于每一个询问,把所有边按权值大小排降序,第一个加进去成为奇环的边就是答案。注意我们不需要关注偶环长成什么样子,所以我们实际上维护的是一棵生成树。这个可以用并查集维护结点到根的边的数量来实现。 因此我们需要关注的边只有 \(
所有题目都在橙到绿之间。梦回小学。 UVA [101] - The Blocks Problem 用一个前驱数组和一个后继数组维护一个类似于链表的结构。 然后每次更改根据题意要求,依次递进地更改结点的前驱 / 后继即可。 namespace XSC062 { using namespace fastIO; const int maxn = 35; char t, t1
P1196 [NOI2002] 银河英雄传说 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn) front数组代表每个点到队头的距离,x,y之间隔了几个舰队答案为abs(front[x]-front[y])-1; nums数组代表当前队伍一共有几个舰队 合并操作只需要将x,y对应祖先也就是fa(x),fa(y)也就是它们各自的队头front nums
先看例题 CF600E Lomsat gelral 链接 对于这道题,我们要对每一个子树进行查询。观察一下,很容易想到通过信息的合并让父节点继承子节点的信息。但是对于每个点都开一个桶会MLE sol1 线段树合并 对于每一个节点都开一个线段树,然后进行线段树合并即可。这样做虽然足以通过本题,但空间巨
概念 在一棵有根树上,指定点集的最近公共祖先(即 LCA ),就是这些节点的祖先集合的并集中离根最远的点 实现 暴力 先对树进行一次深搜,预处理出每个节点的父亲与深度 对于每一次查询,我们先让深度较大的点向上跳,直到两点深度相同为止 接下来让这两个点一起向上跳,直到这两点相遇为止,此时该
音名是指CDEFGAB,是指对固定音高的名称。唱名是为了方便唱谱而采用的名称,按照顺序分别为do re mi fa so la si,与音名相互对应。 唱名:Do Re Mi Fa Sol la Si简谱:1 2 3 4 5 6 7音名:C D E F G A B
T1 Anniversary party/没有上司的舞会 【题意】 公司要开party,如果一个员工的上司来了,那么那个员工就不会来。 每个人都有一个开心值,要求到场的员工的开心值之和最大。 【思路】 设 \(f[u,1/0]\) 为员工 \(u\) 来或者不来的最大开心值和。 当员工 \(u\) ,那他的下属 \(u\) 就一定不
https://www.luogu.com.cn/problem/P2661 题目要求为求最短的环 在并查集的fa()中找i点连接的点t的祖先 找的过程不要合并,只要递归找祖先就好,同时每递归一层就路径长度计数加一 如果找到的祖先就是i,(表示该处形成了环,那么就更新答案但不要连接,否则后面会进入死循环) 如果没找到就修改
https://www.luogu.com.cn/problem/P1892 朋友关系直接并 用一个数组记录每个人第一个敌人,这样之后再出现这个人的敌人直接将这个人的敌人和这个人第一个敌人并起来 答案为并查集的个数,即有同一个祖先的人在同一个并查集内,它们对答案的贡献只算一个 // https://www.luogu.com.cn
[BJWC2010] 严格次小生成树 大体思路 不能算题解吧,就是简简单单记录一下,防止自己再忘了。 21 年暑假才学 LCA 时做过一下,但是一直 90。现在 22 年终于过了。 次小生成树一定只有一条边与最小生成树不同,具体证明看别的博客吧。 于是在求出最小生成树以及构成的树边之后可以枚举每条