【图论】强连通分量进阶

news2024/11/18 21:40:27

一.作用

强连通分量可以判断环和进行缩点。还有一系列作用....

这篇文章介绍缩点


二.题目

https://www.luogu.com.cn/problem/P2341


三.思路

我们分析可以知道当一个点没有出度时,则为最受欢迎的牛。但如果有多个出度,则没有最受欢迎的牛。

这是只有一个出度的情况:

 


这是多个出度的情况:


但为什么要判断环&&对环缩点呢?

 

 

 

四.代码实现

只是微改,基础是

【图论】强连通分量_SY奇星的博客-CSDN博客

#include<bits/stdc++.h>
#define maxn 50005
using namespace std;
int n,m;
int head[maxn],cnt;
struct Edge{
	int u,v,next;
}edge[maxn];
void add(int u,int v){
	edge[++cnt]=(Edge){u,v,head[u]}; head[u]=cnt;
}
vector<int> it[maxn];
int ls,l[maxn],out[maxn];//有多少环  ,这个数属于哪个环,点的出度 
int dfn[maxn],low[maxn],tot;
int sta[maxn],ins[maxn],top;
void tarjan(int u){
	dfn[u]=low[u]=++tot;
	sta[top++]=u;
	ins[u]=1;
	for(int i=head[u];i;i=edge[i].next){
		int v=edge[i].v;
		if(dfn[v]==0){
			tarjan(v);
			low[u]=min(low[u],low[v]);
		}else if(ins[v]){
			low[u]=min(low[u],dfn[v]);
		}
	}
	int j=0;
	if(dfn[u]==low[u]){
		ls++;
		while(1){
			j=sta[--top];
			ins[j]=0;
			it[ls].push_back(j);
			l[j]=ls;  //缩点, 即一个点属于哪个环,或者说是哪个缩点。 
			if(u==j) break;
		}
	}
}
int main(){
	scanf("%d%d",&n,&m);
	int u,v;
	for(int i=1;i<=m;i++){
		scanf("%d%d",&u,&v);
		add(u,v);
	}
	for(int i=1;i<=n;i++){
		if(dfn[i]==0) tarjan(i);
	}
	for(int i=1;i<=n;i++){
		for(int j=head[i];j;j=edge[j].next){
			int v=edge[j].v;
			if(l[i]!=l[v]){
				out[l[i]]++; //出度 
			}
		}
	}
	int ans=0;
	for(int i=1;i<=ls;i++){
		if(out[i]==0){
			if(ans==0) ans=i;
			else{
				cout<<0; return 0;
			} 
		}
	}
	cout<<it[ans].size();
	return 0;
} 

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

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

相关文章

【Docker】部署 mysql8.0 无法访问

文章目录 &#x1f5fd;先来说我的是什么情况&#x1fa81;问题描述&#x1fa81;解决方法&#xff1a;✔️1 重启iptables✔️2 重启docker &#x1fa81;其他有可能连不上的原因✔️1 客户端不支持caching_sha2_password的加密方式✔️2 my.conf 配置只有本机可以访问 &#…

第一章-JavaScript基础进阶part1:DOM

文章目录 前言一、DOM简介1.1 DOM树 二、获取DOM元素1、根据元素id获取-getElementById2、根据元素名称获取元素对象-getElementsByTagName3、H5新增API获取元素4、获取body和html元素 三、DOM元素事件四、操作DOM元素1、改变元素内容2、常用元素的属性操作3、实践案例4、操作D…

Linux操作系统3-项目部署

手动部署 步骤 1.在idea中将文件项目进行打包 2.自定义一个文件目录&#xff0c;上传到Linux 3.使用 java -jar jar包名就可以进行运行 注意,如果需要启动该项目&#xff0c;需要确定所需的端口是否打开 采用这种方式&#xff0c;程序运行的时候会出现霸屏&#xff0c;并且会…

100条Python练习题

100条Python练习题&#xff0c;希望对你提升有所帮助&#xff01; 编写一个程序&#xff0c;输入两个数并计算它们的和。编写一个程序&#xff0c;输入一个字符串&#xff0c;并倒序输出该字符串。编写一个程序&#xff0c;判断一个数是否为质数。编写一个程序&#xff0c;计…

Python+PIL计算两个图像的相似度并返回第一个不匹配的像素的x坐标(附完整版代码)

前言 前几天看到一篇文章写Pythonselenium超级鹰对滑块验证码的操作&#xff0c;大致的思想如下&#xff1a; 1、就是将滑块验证码进行截图 2、利用超级鹰的API进行对图片的处理&#xff0c; 3、返回滑块的距离 我在很久之前也遇到过类似的需求&#xff0c; 当时我的好友帮我写…

16 Springboot——登录功能实现

16.1 修改index.html中表单跳转的地址 将action的地址改为user/login&#xff0c;意思是点击提交按钮后&#xff0c;就会跳转到user/login地址&#xff0c;然后只要用Controller类的RequsetMapping去接这个地址就行了。 <body class"text-center"><form cl…

【已解决】vagrant up下载box速度太慢的解决方法

一、问题背景 本菜鸟在学习雷神(尚硅谷雷丰阳)的这个教程Java项目《谷粒商城》Java架构师 | 微服务 | 大型电商项目的时候&#xff0c;按照视频教程的步骤&#xff0c;正准备用Vagrant工具给VirtualBox安装并启动Centos7的Linux操作系统&#xff0c;当在Windows命令提示符窗体…

RL — 强化学习技巧

一、说明 深度学习&#xff08;DL&#xff09;很难训练&#xff0c;强化学习&#xff08;RL&#xff09;要差得多。在早期开发中&#xff0c;遵循与 DL 相同的策略&#xff1a;保持简单&#xff01;消除任何妨碍您的花里胡哨的东西&#xff0c;并将不确定性降至最低。具体到RL&…

QGIS下载谷歌地图或者其他地图

QGIS安装Welcome to the QGIS project! 打开QGIS 添加图源 Google_Maps: https://mt1.google.com/vt/lyrsr&x{x}&y{y}&z{z} Google_Terrain: https://mt1.google.com/vt/lyrst&x{x}&y{y}&z{z} Google_Roads:https://mt1.google.com/vt/lyrsh&x{x…

Spring Boot参数校验实现自定义响应类优雅处理

&#x1f60a; 作者&#xff1a; 一恍过去 &#x1f496; 主页&#xff1a; https://blog.csdn.net/zhuocailing3390 &#x1f38a; 社区&#xff1a; Java技术栈交流 &#x1f389; 主题&#xff1a; Spring Boot参数校验实现自定义响应类优雅处理 ⏱️ 创作时间&#xf…

模拟考试系统与传统教育方法的对比分析

随着科技的不断进步&#xff0c;教育领域也在不断更新和发展。模拟考试系统作为一种新的教育方式&#xff0c;与传统的教育方法相比&#xff0c;在学习效果、学习方式和学习体验等方面具有诸多优势。 学习效果 模拟考试系统能够提供更全面、更真实的考试环境&#xff0c;从而…

使用mysql容器创建主从同步

1、主数据库设置 创建主数据库容器&#xff1a; docker run -d --restartalways --name mysql-master -p 3306:3306 -v /home/apps/mysql-master/conf:/etc/mysql/conf.d -v /home/apps/mysql-master/data:/var/lib/mysql -e MYSQL_ROOT_PASSWORD123456 mysql:8.0.16 --lower…

【普通人维护windows的方法,不中毒,不弹窗,不卡顿】

前言 IT人也是普通人&#xff0c;我就说说普通人维护电脑的方法。 我的电脑配置 给大家看看&#xff0c;配置一般&#xff0c;运行软件和游戏&#xff0c;可以保持基本流程 日常维护措施 我不太喜欢设定一些非主流的配置&#xff0c;下了一个360卫士,360其他的套餐可以不用下…

【腾讯云 Cloud Studio 实战训练营】云上编程,彻底释放电脑物理内存

文章目录 前言一、快速上手1、账号注册2、新建工作空间3、配置工作空间参数4、工作空间展示5、运行飞机大战代码 二、空间模板三、应用推荐1、点击 Fork2、等待工作空间启动3、安装 Dependencies4、运行 App 总结 前言 腾讯云推出的 Cloud Studio 是基于浏览器的集成式开发环境…

Android 14重要更新预览

Android 14重要更新预览 国际化 Android 14 在 Android 13 的基础上进一步扩展了按应用设定语言功能&#xff0c;提供了一些额外的功能&#xff1a; 自动生成应用的 localeConfig&#xff1a;从 Android Studio Giraffe Canary 7 和 AGP 8.1.0-alpha07 开始&#xff0c;您可以…

vcruntime140_1.dll修复的方法大全,缺失vcruntime140_1.dll解决方法分享

vcruntime140_1.dll这个文件在电脑里属于挺重要的一个文件&#xff0c;一但它缺失了&#xff0c;那么很多程序都是运行不了的&#xff0c;今天我们就来讲解一下这个vcruntime140_1.dll修复以及它的一些作用和属性。 一.vcruntime140_1.dll的作用 vcruntime140_1.dll是Microso…

排序八卦炉之选择、堆排

文章目录 1.选择排序1.1代码实现1.2复杂度 2.堆排序2.1代码实现2.2复杂度 1.选择排序 1.1代码实现 // 当数据趋于有序或随机(可能部分有序) 插排更有优势 O(N)~O(N^2) //选择排序&#xff1a;O&#xff08;N^2&#xff09; O(N^2)~O(N^2) void …

HttpRunner自动化工具之times 重复执行

单个用例重复执行 如果想让某个测试步骤重复执行&#xff0c;可以在test 中增加times参数&#xff0c;如下: 执行效果&#xff1a; 实战案例 光学理论是没用的&#xff0c;要学会跟着一起敲&#xff0c;要动手实操&#xff0c;才能将自己的所学运用到实际当中去&#xff0c;这…

纯粹即刻,畅享音乐搜索的轻松体验

纯粹即刻&#xff0c;畅享音乐搜索的轻松体验 在当今快节奏的生活中&#xff0c;我们常常渴望一种简单而便捷的方式来探索和享受音乐。现在&#xff0c;你可以纯粹即刻地畅享音乐搜索的轻松体验。无论你是寻找热门歌曲还是探索不同风格的音乐&#xff0c;这款应用将为你带来随…

6.物联网操作系统信号量

一。信号量的概念与应用 信号量定义 FreeRTOS信号量介绍 FreeRTOS信号量工作原理 1.信号量的定义 多任务环境下使用&#xff0c;用来协调多个任务正确合理使用临界资源。 2.FreeRTOS信号量介绍 Semaphore包括Binary&#xff0c;Count&#xff0c;Mutex&#xff1b; Mutex包…