基环树

news/2024/10/5 21:17:04

基环树的定义为:一个有向或无向图中,只含有一个环的图,形式化的表达为:

关于这种形状关键点主要在于找环,那么我们可以一步一步的去寻找,当这个点走着走着走到了某个环里,我们可以直接遍历整个环,然后打个标记,这样环就找到了
具体的例题:
E - Reachability in Functional Graph
本题就是一个基环树森林,即不同的连通块,每个块内可能存在一个基环树,那么我们直接暴力的找出来每个环,并且算出环的节点个数,那么每个点的贡献就是,从这个点出发到环内某一节点经过的边数+环的大小,然后再直接进行记忆化搜索即可:

#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e6+10,mod=1e9+7;
signed main()
{std::ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);int n; cin>>n;vector<int>a(n+1);for(int i=1;i<=n;i++) cin>>a[i];vector<int>vis(n+1),dp(n+1); // vis 数组是用来标记这个点是否被遍历过// dp 环中每个点的贡献for(int i=1;i<=n;i++){if(vis[i]) continue; //如果被遍历到了,直接跳过int u=i;while(true){ //一直遍历下去if(vis[u]){ if(vis[u]==i){ //如果是第一次被标记,也就是某个环的入口,我们就计算一下这个环int x=a[u],cnt=1;while(x!=u){ //走回来就停止cnt++,x=a[x];}dp[u]=cnt,x=a[u];while(x!=u){dp[x]=cnt,x=a[x]; //每个节点的贡献都是这个环的大小}break;}}vis[u]=i,u=a[u]; //向下传点}}function<int(int)>dfs;dfs=[&](int u)->int{if(dp[u]) return dp[u];return dp[u]=dfs(a[u])+1;};int res=0;for(int i=1;i<=n;i++) res+=dfs(i);cout<<res;return 0;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hjln.cn/news/43144.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

【日记】挂着相机总是被认成专业人士……(766 字)

正文所有钢笔墨水都写完了,今天先用签字笔吧,懒得打墨水了。这货跟我抢被子,我没抢赢…… 本来空调被就薄,一个人很容易就全卷上跑了。于是我半夜冷醒好多次,每次半梦半醒都要把自己的衣服下摆往下拉。这样感觉才会好一些。这吊人还嘲笑我抢不过,妈耶。于是早上非常困。跟…

Xcode 16 beta (16A5171c) 下载 - Apple 平台 IDE

Xcode 16 beta (16A5171c) 下载 - Apple 平台 IDEXcode 16 beta (16A5171c) 下载 - Apple 平台 IDE IDE for iOS/iPadOS/macOS/watchOS/tvOS/visonOS 请访问原文链接:https://sysin.org/blog/apple-xcode-16/,查看最新版。原创作品,转载请保留出处。 作者主页:sysin.orgXco…

前端使用 Konva 实现可视化设计器(14)- 折线 - 最优路径应用【代码篇】

话接上回[《前端使用 Konva 实现可视化设计器(13)- 折线 - 最优路径应用【思路篇】》](https://www.cnblogs.com/xachary/p/18238704),这一章继续说说相关的代码如何构思的,如何一步步构建数据模型可供 AStar 算法进行路径规划,最终画出节点之间的连接折线。话接上回《前端…

macOS 15 beta (24A5264n) Boot ISO 原版可引导镜像下载

macOS 15 beta (24A5264n) Boot ISO 原版可引导镜像下载macOS 15 beta (24A5264n) Boot ISO 原版可引导镜像下载 iPhone 镜像、Safari 浏览器重大更新、备受瞩目的游戏和 Apple Intelligence 等众多全新功能令 Mac 使用体验再升级 请访问原文链接:https://sysin.org/blog/macO…

如何创建可引导的 macOS Sequoia 15 安装介质

如何创建可引导的 macOS Sequoia 15 安装介质如何创建可引导的 macOS Sequoia 15 安装介质 如何创建可引导的 macOS 安装器 | 如何制作 macOS USB 启动盘 请访问原文链接:https://sysin.org/blog/macos-createinstallmedia/,查看最新版。原创作品,转载请保留出处。 作者主页…

(6)同步复位异步释放电路

一、复位电路时序电路为双稳态电路,因此必须要有复位信号,而组合电路没有存储功能,因此不需要复位信号电路中的复位有两种形式:1.同步复位敏感列表中只有时钟信号没有复位信号2.异步复位敏感列表中不仅有时钟而且有复位信号为避免在释放时产生亚稳态问题,一般采用同步复位…

c/c++ 设计模式-----职责链(Chain Of Responsibility)模式

一个关于涨薪审批的范例#include <iostream>#ifdef _DEBUG //只在Debug(调试)模式下 #ifndef DEBUG_NEW #define DEBUG_NEW new(_NORMAL_BLOCK,__FILE__,__LINE__) //重新定义new运算符 #define new DEBUG_NEW #endif #endif//#include <boost/type_index.hpp>…

开源超闭源!通义千问Qwen2发布即爆火,网友:GPT-4o危

鱼羊发自凹非寺量子位公众号 QbitAI开源大模型全球格局,一夜再变。这不,全新开源大模型亮相,性能全面超越开源标杆 Llama 3。王座易主了。不是“媲美”、不是“追上”,是全面超越。发布两小时,直接冲上 HggingFace 开源大模型榜单第一。这就是最新一代开源大模型 Qwen2,来…