首页 > 其他分享 >10.4 国庆 环形dp与基环树笔记

10.4 国庆 环形dp与基环树笔记

时间:2023-10-04 11:56:25浏览次数:41  
标签:node 10.4 环形 基环树 条边 dp 个点

1.知识点

环形dp

环形 dp 的概念

• 环形dp与基环树在许多环形结构的问题中,我们可以在环中从某个位置把环断开,把这个环变成线性的,然后进行 \(dp\) 等操作。
• 把能通过上述操作解决的环形问题称作 "可拆解的环形问题" 。

环形 dp 的两种策略

• 第一次在任意位置把环断开成链,按照线性问题求解;第二次通过适当的条件和赋值,保证计算出的状态等价于把断开的位置强制相连。
• 把环断成链,然后复制一倍在末尾

基环树

• \(n\) 个点的树共有 \(n - 1\) 条边,如果再加上一条边,即 \(n\) 个点 \(n\) 条边,那树中必然会出现一个环。
• 把这种 \(n\) 个点 \(n\) 条边的联通无向图,即刚好包含一个环的图,称作 "基环树"。
• 如果不保证连通,那么 \(n\) 个点 \(n\) 条边的无向图也可能是若干棵基环树组成的森林,简称 "基环树森林"。

外向树

• \(n\) 个点 \(n\) 条边,每个点有且仅有 \(1\) 条入边的有向图,被称为 "外向树"。
• \(n\) 个点 \(n\) 条边,每个点有且仅有 \(1\) 条出边的有向图,被称为 "内向树"。

基环树的直径

• 基环树中最长的简单路径被称为基环树的最长链,其长度被称为基环树的直径。

基环树找环

• 自己一个很神奇的方法:

  1. 预处理出每个点的 \(father\)
  2. 从某个点开始,一直往它的 \(father\) 走,边走边做 \(vis\) 标记,当走到一个已经访问过的节点时,便找到了环。

Code:

int find(int u)//从 u 点开始找环
{
	vis[u] = true;
	node = u;
	while (!vis[fa[node]])
	{
		node = fa[node];
		vis[node] = true;
	}
	return node;
	//node 为环的一点
}

T1

Link

• \(n\) 个点,\(m\) 条边。每次从任意一个点出发,每次可以走向一个没有访问过的点,或者沿着第一次访问这个点时经过的边后退到上一个点。
• 每到达一个点时,把这个点的编号记录下来,这样最后会组成一个长度为 \(n\) 的序列,期望这个序列的字典序最小,求出这个序列。
• 对于 \(60\%\) 的数据,满足 \(n \leq 5000\), \(m = n - 1\)。
• 对于 \(40\%\) 的数据,满足 \(n \leq 5000\),\(m = n\)。

Solution

• 数据范围提示了做法 /kk。
• \(60 pts\) 就是白送的,容易可以发现一个性质:到达一个点时,一定要遍历完它的子树后才能返回。
• 题目要求字典序最小,于是用 \(vector\) 存图,对每个点的子树内进行排序,最后直接 \(dfs\) 即可。
• 而对于另外的 \(40 pts\),因为 \(m = n\),所以这是一棵基环树。
• 手玩一下基环树的样例可以发现,一定有一条边是无法经过的,我们枚举这条边,然后 \(dfs\) 即可。
• ps:加强版无法通过,可能是 \(vector\) 常数太大了/bx/bx。

标签:node,10.4,环形,基环树,条边,dp,个点
From: https://www.cnblogs.com/User90174/p/17742075.html

相关文章

  • DP 总结
    最小包含串模型描述给定两个长度分别为\(n,m\)字符串\(s,t\),求出长度最小的串,使两个串都是这个串的子序列。基本解法设\(f_{i,j}\)表示第一个字符串前\(i\)个和第二个字符串前\(j\)个字符的最短包含串长度。边界:\(f_{i,0}=f_{0,i}=i\)。转移:\[f_{i,j}=\begin{ca......
  • 状态机DP,力扣188. 买卖股票的最佳时机 IV
    状态机DP,力扣188.买卖股票的最佳时机IV整数数组prices和一个整数k,其中prices[i]是某支给定的股票在第i天的价格。一次只能参与一笔交易,最多可以进行k笔交易,求最大利润。确定状态f[n+1][k+2][2],f[i][j][0]、f[i][j][1]分别表示前i天最多进行j次交易,且在第i天时......
  • dpdk 编译
     引用: https://zhuanlan.zhihu.com/p/56670068720.11版本 DPDK(DataPlaneDevelopmentKit)是数据平面开发工具包,由用于加速在各种CPU架构上运行的数据包处理的库组成。DPDK需要一定的网卡硬件支持,以Intel为例,支持以下网卡: 下面带大家过一遍编译流程,扫清后续应用的......
  • 重学OI#4 简单dp
    观前须知:本文顺序较为混乱,根据本人复习顺序写的,难度严格不递增dp不像数据结构可以套路性的将,以例题为主吧part1:树形dp树是一种非常好的结构,其天然的递归形态保证了最优子结构,使得dp有很好的发挥空间一般状态与子树和路径有关,也有时扯到叶子节点,所以不套路化,特殊情况可能会......
  • RDP远程登录后全屏,本地的任务栏始终显示的问题解决
    文章目录问题解决参考问题RDP远程登录后全屏,本地的任务栏(TaskBar)始终在下面,遮住了远程桌面的最下面,进行了解决。解决BestsolutionhowtohidelocalTaskbarwhenRDPtoaremotedesktopLaunchTaskManagerRight-click“WindowsExplorer”Select“Restart”Itworkson......
  • csps区间dp
    加分二叉树我们可以枚举中间这个k的位置,然后分别递归计算左右子树,这就让我们想到这是一个和区间有关的,我们可以用区间dp来解决。\(f[i][j]\)表示i,j这个区间的最大分值。用一个很板子的区间dp就可以解决了。至于求前序遍历,我们也只需要通过递归然后枚举中间的根,第一个满足......
  • LeetCode 周赛上分之旅 #49 再探内向基环树
    ⭐️本文已收录到AndroidFamily,技术和职场问题,请关注公众号[彭旭锐]和BaguTreePro知识星球提问。学习数据结构与算法的关键在于掌握问题背后的算法思维框架,你的思考越抽象,它能覆盖的问题域就越广,理解难度也更复杂。在这个专栏里,小彭与你分享每场LeetCode周赛的解题报告,一......
  • dpdk lpm
    DPDKLPM(LongestPrefixMatch)是高性能前缀路由匹配库,用于数据包转发过程中快速查找与dstIP地址最长匹配的路由表项。LPM特点高性能:基于前缀树算法实现快速匹配。线程安全:多线程并发安全。灵活配置:支持动态配置路由表,可在运行时添加、删除或修改路由表项。内存管理:使用MemoryPo......
  • dpdk官方转发例子分析
    例子源码http://dpdk.org/browse/dpdk/tree/examples/skeleton/basicfwd.cmain函数主流程1.初始化环境抽象层EALintret=rte_eal_init(argc,argv);if(ret<0)rte_exit(EXIT_FAILURE,"ErrorwithEALinitialization\n");2.分配mempooldpdk使用mbuf保存packet,me......
  • dpvs dnat模式
    dnat模式发送报文src/ipvs/ip_vs_core.c针对ipv4,INET_HOOK_PRE_ROUTING注册2个函数dp_vs_pre_routing和dp_vs_in,因为nat不做防止DDos攻击的syn_proxy,所以看dp_vs_in。conn_sched新请求建立连接选择后端rs建立连接,支持tcp、udp和icmp。dp_vs_schedule->dp_vs_conn_new->dp_vs_c......