P2002 消息扩散(缩点)

news/2025/3/15 22:53:18/文章来源:https://www.cnblogs.com/gxjcnblogs/p/18774333

P2002 消息扩散

题目背景

本场比赛第一题,给个简单的吧,这 100 分先拿着。

题目描述

\(n\) 个城市,中间有单向道路连接,消息会沿着道路扩散,现在给出 \(n\) 个城市及其之间的道路,问至少需要在几个城市发布消息才能让这所有 \(n\) 个城市都得到消息。

输入格式

第一行两个整数 \(n, m\),表示 \(n\) 个城市,\(m\) 条单向道路。

以下 \(m\) 行,每行两个整数 \(b, e\) 表示有一条从 \(b\)\(e\) 的道路,道路可以重复或存在自环。

输出格式

一行一个整数,表示至少要在几个城市中发布消息。

输入输出样例 #1

输入 #1

5 4
1 2
2 1
2 3
5 1

输出 #1

2

说明/提示

【样例解释 #1】

样例中在 \(4, 5\) 号城市中发布消息。

【数据范围】

对于 \(20 \%\) 的数据,\(n \le 200\)
对于 \(40 \%\) 的数据,\(n \le 2000\)
对于 \(100 \%\) 的数据,\(1 \le n \le {10}^5\)\(1 \le m \le 5 \times {10}^5\)
这道题也一样,只需要统计入度为零的连通分量,因为如果他的入度为零,说明没有人可以把消息传给它,它必须自己获得消息,反之如果他的入度不为零,说明,消息可以从其它分量传给他,他自己就不用获得消息

#include<iostream>
#include<stack>
#include<set>
#define int long long
using namespace std;
const int N=1e5+5;
int n,m,b,e;
set<int>v[N];
stack<int>s;
int low[N],dfsn[N],vis[N],scc[N],inc[N],outc[N];
int t=0,cnt=0,ans=0;
void dfs(int x){low[x]=dfsn[x]=++t;vis[x]=1,s.push(x);for(int y:v[x]){if(!dfsn[y]){dfs(y);low[x]=min(low[x],low[y]);}else if(vis[y])low[x]=min(low[x],dfsn[y]);}if(low[x]==dfsn[x]){cnt++;while(s.top()!=x){vis[s.top()]=0;scc[s.top()]=cnt;s.pop();}vis[s.top()]=0;scc[s.top()]=cnt;s.pop();}
}
signed main(){cin>>n>>m;while(m--){cin>>b>>e;if(b!=e)v[b].insert(e);}for(int i=1;i<=n;i++)if(!dfsn[i])dfs(i);for(int x=1;x<=n;x++){for(int y:v[x]){if(scc[x]!=scc[y]){outc[scc[x]]++;inc[scc[y]]++;}}}for(int i=1;i<=cnt;i++)if(!inc[i])ans++;cout<<ans;return 0;
}

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

cmake识别不到vcpkg安装的包的解决(以libssh为例)

承接上篇 vcpkg 跨平台的c/c++库包管理工具(以libssh为例) - 夕西行 - 博客园 vcpkg安装libssh后,vs2022创建的cmake项目竟然不能find_package到libssh 问题出在CMakeLists.txt,注意位置1、2、3的顺序一定不能变cmake_minimum_required (VERSION 3.20)#vcpkg————位置1 …

昆工昆明理工大学冶金最新复试真题及答案

--冶金工程考研809冶金物理化学有色冶金学有色金属冶金冶金过程及设备F002钢铁冶金学冶金调剂

《Transformer自然语言处理实战 : 使用Hugging Face Transformers库构建NLP应用》PDF免费下载

《Transformer自然语言处理实战》聚焦 Hugging Face Transformers 库,系统讲解 Transformer 模型在 NLP 任务中的应用。涵盖文本分类、命名实体识别、机器翻译等核心技术,并提供实践案例,帮助读者快速掌握模型微调与部署。适合 NLP 初学者及希望深入理解 Transformer 的开发…

【论文阅读】maskformer: Per-Pixel Classification is Not All You Need for Semantic Segmentation

标题 Per-Pixel Classification is Not All You Need for Semantic Segmentation (NIPS 2021) 论文:Per-Pixel Classification is Not All You Need for Semantic Segmentation 代码:https://github.com/facebookresearch/MaskFormer 摘要 ​ 现代方法通常将语义分割视为逐…

鸿蒙特效教程04-直播点赞动画效果实现教程

鸿蒙特效教程04-直播点赞动画效果实现教程 在时下流行的直播、短视频等应用中,点赞动画是提升用户体验的重要元素。当用户点击屏幕时,屏幕上会出现飘动的点赞图标,感觉挺好玩的。本教程适合HarmonyOS初学者,通过简单到复杂的步骤,通过HarmonyOS的Canvas组件,一步步实现这…

鸿蒙特效教程02-微信语音录制动画效果实现教程

鸿蒙特效教程02-微信语音录制动画效果实现教程本教程适合HarmonyOS初学者,通过简单到复杂的步骤,一步步实现类似微信APP中的语音录制动画效果。最终效果预览 我们将实现以下功能:长按"按住说话"按钮:显示录音界面和声波动画 录音过程中显示实时时长 手指上滑:取…

SpringBoot使用Kafka生产者、消费者

SpringBoot使用Kafka生产者、消费者@目录依赖配置文件生产者消费者 依赖 <!--kafka--> <dependency><groupId>org.springframework.kafka</groupId><artifactId>spring-kafka</artifactId><version>xxx</version> </depend…

jasperreport 使用和问题记录

引言:之前一直没有记录的习惯,所以在这里记录有些是回忆,所以可能有些不连贯.而且本人的问题不一定是你的问题,仅作参考. (注:本人是使用java生成pdf文件) 1.介绍(只介绍自己用的到) 进入软件 File->new->jasper report->blank A4 我们得到了一张A4纸,如下图所示.(注:…

Java学习四大名著:《Java核心技术 卷II:高级特性(原书第12版)》 | PDF免费下载

《Java核心技术 卷II:高级特性(原书第12版)》是Java学习的经典书籍,该书深入探讨了 Java 语言的高级功能,涵盖流与文件处理、并发编程、网络、数据库、JVM 调优等关键主题。适合有一定基础的开发者,帮助他们掌握高效编程技巧,优化性能,并深入理解 Java 生态系统,是进阶…

STM32CubeIDE 下载与安装教程(以 1.18.0 版本为例)

STM32CubeIDE 下载与安装教程(以 1.18.0 版本为例) 软件介绍 STM32CubeIDE 是 STMicroelectronics 提供的官方集成开发环境(IDE),专为 STM32 微控制器系列设计。它融合了 STM32CubeMX 和 Eclipse 的强大功能,提供了一个完整的开发环境,适用于嵌入式软件开发和调试。STM3…

【作业3】结对项目:实现一个自动生成小学四则运算题目的命令行程序

⭐成员:3223004473詹艺珏 and 3223004301吴梦琪 📎Github链接:https://github.com/Jue610/Jue610/tree/main/ArithProbelm这个作业属于哪个课程 23软件工程这个作业要求在哪里 【作业3】结对项目这个作业的目标 实现一个自动生成小学四则运算题目的命令行程序,培养团…

用ESP32做一个遥控机械臂

RC汽车机械臂只是一个有轮子的RC汽车。该机械臂是一个四自由度机械臂,这意味着它有四个运动部件。我使用mg90伺服电机,因为它们是金属的,但塑料sg90也应该工作。如下图所示。我使用了两个独立的电源,每个都由2S锂离子(Li-on)电池组成,一个用于MCU,另一个用于电机。这是为…