洛谷 P2863

devtools/2024/9/19 17:29:13/ 标签: 图论, 算法, 深度优先

[USACO06JAN] The Cow Prom S

题目描述

有一个 n n n 个点, m m m 条边的有向图,请求出这个图点数大于 1 1 1 的强连通分量个数。

输入格式

第一行为两个整数 n n n m m m

第二行至 m + 1 m+1 m+1 行,每一行有两个整数 a a a b b b,表示有一条从 a a a b b b 的有向边。

输出格式

仅一行,表示点数大于 1 1 1 的强连通分量个数。

样例 #1

样例输入 #1

5 4
2 4
3 5
1 2
4 1

样例输出 #1

1

提示

数据规模与约定

对于全部的测试点,保证 2 ≤ n ≤ 1 0 4 2\le n \le 10^4 2n104 2 ≤ m ≤ 5 × 1 0 4 2\le m\le 5\times 10^4 2m5×104 1 ≤ a , b ≤ n 1 \leq a, b \leq n 1a,bn

#include <bits/stdc++.h>
using namespace std;
#define N 10005
vector<int> G[N];
//vis 只记录当前连通分量的访问情况(即是否可达),used记录全局的 
bool used[N] = {0}, vis[N] ={0};int indexx = 0,dfn[N] = {0},low[N] = {0},color[N] = {0};
int colornum = 0;
stack<int> s;
void paint()
{int now = s.top();s.pop();color[colornum]++;//这里释放点的访问情况(是否在栈中/是否是当前的联通中) //记录一个点是否在栈中是为了正确判断节点之间的可达性,进而确定哪些节点构成了强连通分量。 vis[now] = false; 
}
void dfs(int now)
{if(vis[now] == true) return ;vis[now] = true;used[now] = true;s.push(now);low[now] = dfn[now] = ++indexx;for(int i=0;i<G[now].size();i++){int child = G[now][i];//如果已经记录时间戳但没有访问的节点不会进入栈中 if(dfn[child] == 0){dfs(child);low[now] = min(low[now],low[child]);}//没有分配时间戳则说明未被先前的联通量所搜索//分配了时间戳也要检测是否可达(在栈中) else if(vis[child])//else分支一定要加,否则一定会进入 {low[now] = min(low[now],dfn[child]);}}if(low[now] == dfn[now]){colornum++;while(s.top()!=now){paint();}paint();}
}
int main()
{int n,m;cin>>n>>m;for(int i=0;i<m;i++){int from,to;cin>>from>>to;G[from].push_back(to);}	for(int i = 1;i<=n;i++){if(used[i] == false) dfs(i);}int ans = 0;for(int i = 1;i<=colornum;i++){if(color[i]>1) ans++;}cout<<ans;return 0;} 

http://www.ppmy.cn/devtools/2338.html

相关文章

Android RecyclerView的LayoutManager配置

RecyclerView的item布局方式依赖于其配置的布局管理器。不同的布局管理器可以实现不同的界面效果。 LayoutManager介绍 RecyclerView可以通过setLayoutManager设置布局管理器&#xff0c;该方法的源码如下&#xff1a; /*** Set the {link LayoutManager} that this RecyclerV…

Linux Zookeeper 安装

1 何为伪集群模式 在学习环境中&#xff0c;如果没有多余的服务器&#xff0c;这里就将三个ZooKeeper 节点都安装到本地机器上&#xff0c;故称谓伪集群模式。 虽然&#xff0c;伪集群模式只是便于开发、普通测试&#xff0c;尽量不用于生产环境。从学习的角度来说&#xff0c…

ChatGPT实用技巧:提升论文写作效果

ChatGPT无限次数:点击直达 ChatGPT实用技巧&#xff1a;提升论文写作效果 随着人工智能技术的不断发展&#xff0c;ChatGPT作为一种先进的自然语言生成模型&#xff0c;为学术界和科研人员提供了强大的写作辅助工具。本文将介绍如何利用ChatGPT提升论文写作效果&#xff0c;并…

Go Web框架-Beego

本文主要分享GO语言常用的web框架&#xff1a;Beego框架&#xff0c;简单分享如何快速入门Beego Beego框架 Beego框架的简介 Beego框架是一款开源的由国人开发的全栈式的Web框架&#xff0c;它采用了MVC架构&#xff0c;支持自动化路由、ORM、Session、日志、缓存等功能&#x…

中霖教育:二建考试中六个专业分别有什么特点?

建筑实务 《建筑实务》技术部分多以选择题为主&#xff0c;主要是对各种数据的考查;管理部分以案例题为主&#xff0c;旨在考查大家的综合能力&#xff0c;也是分值占比比较多的部分。进度控制的网络图和流水施工每年必考其一;质量管理主要结合技术部分命题;安全管理和合同管理…

python中中英文打印对齐解决方案

在python中&#xff0c;有时候会出现中英文混合输出的情形&#xff0c;但是由于中文默认是全角格式&#xff08;一个中文字符占用两个字符宽度&#xff09;&#xff0c;这会对python原生的print函数带来一些障碍。尤其是用户用print对齐输出的时候&#xff0c;这种差异会导致文…

HBase2.x学习笔记

文章目录 一、HBase 简介1、HBase 定义1.1 概述1.2 HBase 与 Hadoop 的关系1.3 RDBMS 与 HBase 的对比1.4 HBase 特征简要 2、HBase 数据模型2.1 HBase 逻辑结构2.2 HBase 物理存储结构2.3 HBase的表数据模型 3、HBase 基本架构3.1 Master3.2 Region Server3.3 Zookeeper3.4 HD…

第十四届蓝桥杯ABD题

A、阶乘求和&#xff1a; 【问题描述】 令 S 1! 2! 3! ... 202320232023! &#xff0c;求 S 的末尾 9 位数字。 提示&#xff1a;答案首位不为 0 。 【答案提交】 这是一道结果填空的题&#xff0c;你只需要算出结果后提交即可。本题的结果为一 个整数&#xff0c;在…

【QT进阶】Qt Web混合编程之CEF、QCefView简单介绍

往期回顾 【QT入门】Qt自定义控件与样式设计之自定义QLineEdit实现搜索编辑框-CSDN博客 【QT入门】Qt自定义控件与样式设计之自定义QTabWidget实现tab在左&#xff0c;文本水平的效果-CSDN博客 【QT进阶】Qt Web混合编程之CEF、QCefView简单介绍 一、web组件 Web组件是一种用…

webpack--区分开发环境和生产环境

区分开发和生产环境 初步使用 可以直接配置两个文件&#xff1a; dev const path require("path"); const { VueLoaderPlugin } require("vue-loader"); const HtmlWebpackPlugin require("html-webpack-plugin"); const { DefinePlugin…

Python 学习笔记(九)—— 操作系统和环境

目录 一、os模板 二、platform模块 三、扩展第三方库psutil 四、操作系统信息 4.1 使用platform模块 4.2 使用sys模块 4.3 使用os模块 4.4 使用subprocess模块 Python操作系统和环境主要指的是使用Python进行系统级操作和管理的相关功能和工具。 Python提供了许多用于…

ubuntu下的串口调试工具cutecom

系统&#xff1a;ubuntu20.04 &#xff08;1&#xff09;接线 使用 rs485&#xff1c;-----> rs232 转接口&#xff08; 设备直接出来的是rs485&#xff09;&#xff0c;电脑主机接入一根 rs232&#xff1c;-----> USB口 连接线&#xff0c;ubuntu系统下打开 termin…

博客系统项目测试(selenium+Junit5)

在做完博客系统项目之后&#xff0c;需要对项目的功能、接口进行测试&#xff0c;利用测试的工具&#xff1a;selenium以及Java的单元测试工具Junit进行测试&#xff0c;下面式测试的思维导图&#xff0c;列出该项目需要测试的所有测试用例&#xff1a; 测试结果&#xff08;全…

五个大学生必备的学习工具

五个大学生必备的学习辅助工具&#xff0c;做笔记、画思维导图、翻译、转格式、AI写作通通都能帮你解决&#xff01; 1、学霸必备思维导图–迅捷画图 直达链接>>> https://www.liuchengtu.com/ 可以下载软件&#xff0c;也可以直接收藏网址直接使用网页版&#xff0…

Android开发——ListView

activity_main.xml <?xml version"1.0" encoding"utf-8"?> <LinearLayout xmlns:android"http://schemas.android.com/apk/res/android"android:layout_height"match_parent"android:layout_width"match_parent"…

前端用 HTML5 + CSS3 + JavaScript,后端连接什么数据库更简单?

当前端使用 HTML5、CSS3 和 JavaScript 进行开发时&#xff0c;后端连接何种数据库是一个非常重要的问题&#xff0c;因为数据库的选择直接影响着后端代码的编写、数据存储与查询的效率以及系统的可维护性。 1. 关系型数据库&#xff08;SQL 数据库&#xff09;&#xff1a; …

如何快速打开Github

为什么我们打开Github速度很慢&#xff1f;很卡&#xff0c;甚至于访问不了&#xff0c;原因是中间有个域名通过DNS解析的过程&#xff0c;将域名解析为对应的ip地址&#xff0c;主要时间都是花在了DNS解析上了。 我们在浏览器输入 GitHub 的网址时&#xff0c;会向 DNS 服务器…

外贸企业邮箱有什么用?如何选择适合的外贸企业邮箱?

外贸公司每天都需要与各个国家的客户打交道&#xff0c;通过邮箱聊天、谈合作。由于语言、文化差异&#xff0c;一个小错误可能会致使业务失败和数据泄漏风险。做为外贸企业的重要沟通工具&#xff0c;企业电子邮件的功效是显而易见的。那样&#xff0c;外贸企业邮箱有什么用&a…

flutter知识点---生命周期

Flutter 应用的生命周期涉及两个层面&#xff1a;Widget&#xff08;组件&#xff09;的生命周期 和 应用程序&#xff08;App&#xff09;的生命周期。下面分别对这两个方面进行详细介绍&#xff1a; Widget&#xff08;组件&#xff09;的生命周期 Flutter 中的 Widget 是构…

【爬虫开发】爬虫从0到1全知识md笔记第5篇:Selenium课程概要,selenium的其它使用方法【附代码文档】

爬虫开发从0到1全知识教程完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;爬虫课程概要&#xff0c;爬虫基础爬虫概述,,http协议复习。requests模块&#xff0c;requests模块1. requests模块介绍,2. response响应对象,3. requests模块发送请求,4. request…