当前位置: 首页 > news >正文

P3916 图的遍历(Tarjan缩点和反向建边)

 P3916 图的遍历 - 洛谷 | 计算机科学教育新生态

写法一:Tarjan

思路:先运用Tarjan算法得到每个连通块中最大的编号,然后对每个连通块进行缩点重新建图,进行dfs,得到缩点后的连通块能够达到的最大编号。

Code:


constexpr int N=1e5+5,mod=1e9+7;int a[N],dfn[N],stk[N],low[N],top,scc[N],cnt,tot;
int n,m,instack[N],ma[N],sz[N];
bool st[N];
int x[N],y[N];
vector<int> e[N],g[N];void Tarjan(int u)
{stk[++top]=u,instack[u]=1;low[u]=dfn[u]=++tot;for(auto t:e[u]){if(!dfn[t]){Tarjan(t);low[u]=min(low[u],low[t]);}else if(instack[t]) low[u]=min(low[u],dfn[t]);}if(low[u]==dfn[u]){cnt++; int y;//cout<<"____"<<cnt<<' '<<u<<endl;do{y=stk[top--]; instack[y]=0;scc[y]=cnt;// cout<<"____"<<cnt<<' '<<y<<endl;ma[cnt]=max(ma[cnt],y);}while(u!=y);}
}void dfs(int u)
{if(a[u]) return ;a[u]=ma[u];// cout<<u<<' '<<a[u]<<' '<<g[u].size()<<endl;for(auto t:g[u]){if(!a[t]){dfs(t);}a[u]=max(a[u],a[t]);// cout<<u<<' '<<t<<' '<<a[u]<<endl;}
}
void solve()
{cin>>n>>m;for(int i=0;i<m;i++){cin>>x[i]>>y[i];e[x[i]].push_back(y[i]);}for(int i=1;i<=n;i++)if(!dfn[i])Tarjan(i);for(int i=0;i<m;i++){if(scc[x[i]]==scc[y[i]]) continue;g[scc[x[i]]].push_back(scc[y[i]]);}for(int i=1;i<=cnt;i++){if(!a[i]) dfs(i);}for(int i=1;i<=n;i++)cout<<a[scc[i]]<<' ';
}

写法二:反向建图

既然要计算每个点能走到的最大编号,我们可以直接从大编号 开始搜索与它关联的路径,该路径上的点均为大编号。

Code:

constexpr int N=1e5+5,mod=1e9+7;int a[N],n,m;
vector<int> e[N];void dfs(int u,int i)
{if(a[u]) return ;a[u]=i;for(auto t:e[u]){if(!a[t]){dfs(t,i);}}}
void solve()
{cin>>n>>m;for(int i=1;i<=m;i++){int a,b;cin>>a>>b;e[b].push_back(a);}for(int i=n;i;i--)if(!a[i]) dfs(i,i);for(int i=1;i<=n;i++) cout<<a[i]<<' ';
}

相关文章:

P3916 图的遍历(Tarjan缩点和反向建边)

P3916 图的遍历 - 洛谷 | 计算机科学教育新生态 写法一&#xff1a;Tarjan 思路&#xff1a;先运用Tarjan算法得到每个连通块中最大的编号&#xff0c;然后对每个连通块进行缩点重新建图&#xff0c;进行dfs&#xff0c;得到缩点后的连通块能够达到的最大编号。 Code: conste…...

Android13 允许桌面自动旋转

一&#xff09;需求-场景 Android13 实现允许桌面自动旋转 Android13 版本开始后&#xff0c;支持屏幕自动旋转&#xff0c;优化体验和兼容性&#xff0c;适配不同屏幕 主界面可自动旋转 二&#xff09;参考资料 android framework13-launcher3【06手机旋转问题】 Launcher默…...

cocotb value cocotb—基础语法对照篇

cocotb—基础语法对照篇 import cocotb from cocotb.triggers import Timer from adder_model import adder_model from cocotb.clock import Clock from cocotb.triggers import RisingEdge import randomcocotb.test() async def adder_basic_test(dut):"""Te…...

001-SpringBoot整合日志

SpringBoot整合日志 一、引入依赖二、配置 application.yml三、配置文件 logback.xml四、配置文件 WebConfigurerAdapter五、配置常量文件六、配置拦截器七、效果展示一、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId&…...

【Java基础面试题011】什么是Java中的自动装箱和拆箱?

相关知识补充&#xff1a;《Java从入门到精通(JDK17版)》_尚硅谷电子书.pdf Autism_Btkrsr/Blog_md_to_pdf - 码云 - 开源中国 (gitee.com) 回答重点 自动装箱&#xff1a;Java编译器自动将基本数据类型转换为包装类型 自动拆箱&#xff1a;Java编译器自动将包装类转换为基…...

ERROR in [eslint] Invalid Options ‘extensions‘ has been removed.

看着这个报错 感觉是版本不对引起的 ERROR in [eslint] Invalid Options: - Unknown options: extensions - extensions has been removed. ERROR in Error: Child compilation failed: [eslint] Invalid Options: - Unknown options: extensions - extensions has b…...

消息传递神经网络(Message Passing Neural Networks, MPNN)

消息传递神经网络&#xff08;Message Passing Neural Networks, MPNN&#xff09; 一、引言二、消息传递框架概述1.消息传递阶段&#xff08;1&#xff09;消息生成与传播-message&#xff08;2&#xff09;消息聚合-aggregate&#xff08;3&#xff09;消息更新-update&#…...

常用图像变换方法

伽马变换: void gamma_transform(cv::Mat &img, double gamma) {cv::Mat normalized;img.convertTo(normalized, CV_64F...

从被动响应到主动帮助,ProActive Agent开启人机交互新篇章

在人工智能领域&#xff0c;我们正见证着一场革命性的变革。传统的AI助手&#xff0c;如ChatGPT&#xff0c;需要明确的指令才能执行任务。但现在&#xff0c;清华大学联合面壁智能等团队提出了一种全新的主动式Agent交互范式——ProActive Agent&#xff0c;它能够主动观察环境…...

力扣hot100道【贪心算法后续解题方法心得】(三)

力扣hot100道【贪心算法后续解题方法心得】 十四、贪心算法关键解题思路1、买卖股票的最佳时机2、跳跃游戏3、跳跃游戏 | |4、划分字母区间 十五、动态规划什么是动态规划&#xff1f;关键解题思路和步骤1、打家劫舍2、01背包问题3、完全平方式4、零钱兑换5、单词拆分6、最长递…...

工业齐套管理虚拟现实仿真模拟软件

工业齐套管理虚拟现实仿真模拟软件是与法国最大的汽车制造商合作开发的一款虚拟现实仿真模拟软件&#xff0c;借助身临其境的虚拟现实环境&#xff0c;无需停止生产线&#xff0c;即可模拟仓库和提货区域。 工业齐套管理虚拟现实仿真模拟软件不仅适用于汽车工业&#xff0c;安全…...

ARP表、MAC表、路由表的区别和各自作用

文章目录 ARP表、MAC表、路由表的区别和各自作用同一网络内:ARP表request - 请求reply - 响应 MAC地址在同一网络内,交换机如何工作? 不同网络路由表不同网络通信流程PC1到路由器路由器到PC2流程图 简短总结 ARP表、MAC表、路由表的区别和各自作用 拓扑图如下: 同一网络内:…...

Android 使用OpenGLES + MediaPlayer 获取视频截图

概述 Android 获取视频缩略图的方法通常有: ContentResolver: 使用系统数据库MediaMetadataRetriever: 这个是android提供的类&#xff0c;用来获取本地和网络media相关文件的信息ThumbnailUtils: 是在android2.2&#xff08;api8&#xff09;之后新增的一个&#xff0c;该类为…...

浏览器的事件循环机制

浏览器和Node的事件循环机制 引言浏览器的事件循环机制 引言 由于JS是单线程的脚本语言&#xff0c;所以在同一时间只能做一件事情&#xff0c;当遇到多个任务时&#xff0c;我们不可能一直等待任务完成&#xff0c;这会造成巨大的资源浪费。为了协调时间&#xff0c;用户交互…...

Z2400032基于Java+Mysql+SSM的校园在线点餐系统的设计与实现 代码 论文

在线点餐系统 1.项目描述2. 技术栈3. 项目结构后端前端 4. 功能模块5. 项目实现步骤注意事项 6.界面展示7.源码获取 1.项目描述 本项目旨在开发一个校园在线点餐系统&#xff0c;通过前后端分离的方式&#xff0c;为在校学生提供便捷的餐厅点餐服务&#xff0c;同时方便餐厅和…...

k8s使用的nfs作为sc。

k8s使用的nfs作为sc。 当前出现一个问题&#xff1a; 1.有一个pod他是通过流进行文件解压并写入到nfs服务器对应的目录中。 2.一个大压缩包下有20多个压缩包&#xff0c;递归解压。解压完成后应该是20多个文件夹&#xff0c;文件夹下有.json文件。 3.pod中的程序解压后去找以.j…...

linux下Qt程序部署教程

文章目录 [toc]1、概述2、静态编译安装Qt1.1 安装依赖1.2 静态编译1.3 报错1.4 添加环境变量1.5 下载安装QtCreator 3、配置linuxdeployqt环境1.1 在线安装依赖1.2 使用linuxdeployqt提供的程序1.3 编译安装linuxdeployqt 4、使用linuxdeployqt打包依赖1.1 linuxdeployqt使用选…...

tp6 合成两个pdf文件(附加pdf或者替换pdf)

最近在做项目有个需求&#xff0c;项目中需要根据设置的html合同模板自动生成PDF合同供客户下载签署&#xff0c;并根据回传的已签署合同尾页来替换原来未签署合同的尾页&#xff0c;合成新的已签署合同文本。 读取两个PDF文件并合成的 具体代码记录如下&#xff1a; use set…...

工作:三菱PLC防止程序存储器爆满方法

工作&#xff1a;三菱PLC防止程序存储器爆满方法 一、防止程序存储器爆满方法1、编程时&#xff0c;添加行注释时&#xff0c;记得要选“外围”&#xff0c;这样不会占用PLC程序存储器内存&#xff1b;2、选择“外围”的注释&#xff0c;前面会有个*星号&#xff0c;方便检查 二…...

jmeter 获取唯一全局变量及多线程读写的问题

一、jmeter 获取唯一ID号全局变量 在JMeter中获取唯一ID号并设置为全局变量&#xff0c;可以通过以下几种方法实现&#xff1a; 使用JMeter内置的UUID函数&#xff1a; JMeter提供了一个内置的函数__UUID&#xff0c;可以生成一个随机的UUID&#xff0c;这个UUID是全局唯一的。…...

SaaS Boilerplate认证系统详解:用户注册、OAuth登录和双重验证完整实现

SaaS Boilerplate认证系统详解&#xff1a;用户注册、OAuth登录和双重验证完整实现 【免费下载链接】saas-boilerplate SaaS Boilerplate - Open Source and free SaaS stack that lets you build SaaS products faster in React, Django and AWS. Focus on essential business…...

Phi-4-reasoning-vision-15B实操手册:强约束提示词设计与错误行为规避

Phi-4-reasoning-vision-15B实操手册&#xff1a;强约束提示词设计与错误行为规避 1. 引言&#xff1a;当视觉模型“自作主张”时&#xff0c;我们该怎么办&#xff1f; 你上传了一张软件界面的截图&#xff0c;想问问某个按钮是干什么用的。结果模型没回答你的问题&#xff…...

Step3-VL-10B基础教程:Gradio WebUI本地/远程访问配置与常见报错解决

Step3-VL-10B基础教程&#xff1a;Gradio WebUI本地/远程访问配置与常见报错解决 1. 引言 你是不是已经部署好了Step3-VL-10B这个强大的视觉语言模型&#xff0c;但在浏览器里输入地址后&#xff0c;要么页面打不开&#xff0c;要么显示一堆看不懂的错误信息&#xff1f;别着…...

YOLOv5与DeepSort结合优化:如何调整参数让目标跟踪更精准(附代码对比)

YOLOv5与DeepSort参数调优实战&#xff1a;提升目标跟踪精度的关键策略 在计算机视觉领域&#xff0c;目标跟踪技术正从实验室快速走向工业应用。当基础功能实现后&#xff0c;如何让系统在实际场景中表现更稳定、更精准&#xff0c;成为开发者面临的核心挑战。本文将深入剖析Y…...

GX Works2编程避坑指南:PLC数据传输指令(MOV/FMOV/BMOV)的5个常见错误与正确写法

GX Works2编程避坑指南&#xff1a;PLC数据传输指令的5个致命陷阱与工业级解决方案 在自动化产线的深夜调试现场&#xff0c;一个看似简单的MOV指令错误可能导致整条生产线异常停机——这种场景对PLC工程师来说绝不陌生。三菱GX Works2作为工业控制领域的标杆软件&#xff0c;其…...

别再死记硬背了!用Wireshark抓包实战,5分钟搞懂TCP三次握手和HTTP请求全过程

用Wireshark抓包实战&#xff1a;5分钟可视化TCP三次握手与HTTP请求 刚接触计算机网络时&#xff0c;那些抽象的三次握手、滑动窗口、HTTP报文总让人头晕。直到我第一次用Wireshark看到真实的数据包在屏幕上跳动——原来教科书上的每个概念都能在抓包结果中找到对应的"证…...

Alpamayo-R1-10B参数调优教程:Temperature从0.4→1.2对轨迹激进程度的影响可视化对比

Alpamayo-R1-10B参数调优教程&#xff1a;Temperature从0.4→1.2对轨迹激进程度的影响可视化对比 1. 引言 如果你正在使用Alpamayo-R1-10B这个自动驾驶模型&#xff0c;可能会发现一个有趣的现象&#xff1a;同样的路口场景&#xff0c;同样的驾驶指令&#xff0c;模型给出的…...

Java程序设计(第3版)第二章——变量的三种定义方式2和3

变量的第二种使用方式 在声明的同时并赋值 数据类型 变量名 &#xff1d; 数据; int b &#xff1d; 12; System.out.println(b); 输出为12变量的第三种使用方式 同时定义多个同类型变量 int c,d&#xff1d;1,e&#xff1d;11,f&#xff1d;23,g&#xff1d;32,h&#xff1d;0…...

Excel实战:手把手教你用条件格式和分类汇总分析个人开支(计算机二级考点全覆盖)

Excel实战&#xff1a;手把手教你用条件格式和分类汇总分析个人开支&#xff08;计算机二级考点全覆盖&#xff09; 在个人财务管理中&#xff0c;Excel是最基础也最强大的工具之一。无论是备考计算机二级的考生&#xff0c;还是希望提升工作效率的职场人士&#xff0c;掌握Exc…...

面试-Linear Attention的学习

Linear Attention 学习笔记 0. Linear Attention 的目的与背景 0.1 标准 Attention 的瓶颈 在 Transformer 的标准 Self-Attention 机制中,注意力分数的计算方式如下: Attention(Q,K,V)=softmax(QKTd)V \text{Attention}(Q, K, V) = \text{softmax}\left(\frac{QK^T}{\sqr…...