tarjan求强连通分量(模板)
https://www.luogu.org/problem/P2341
- #include<cstdio>
- #include<cstring>
- #include<algorithm>
- using namespace std;
- const int maxn=;
- int pre[maxn],other[maxn],last[maxn],l;
- int n,m;
- int dfn[maxn],low[maxn],ans[maxn],st[maxn],belong[maxn],cnt,top,qw;
- //dfn->dfs序,low是点上非树边指向的点(拥有最小的dfs序 ),st是一个栈,记录环上的点,belong是点所属于的环
- void add(int x,int y)
- {
- l++;
- pre[l]=last[x];
- last[x]=l;
- other[l]=y;
- }
- int ru[maxn],chu[maxn];//入度,出度
- void dfs(int x)
- {
- dfn[x]=low[x]=++cnt;//可以知道每个点都指向自己(low)
- ru[x]=;
- st[++top]=x;
- for(int p=last[x];p;p=pre[p])
- {
- int v=other[p];
- if(!dfn[v])
- {
- dfs(v);//此时v的信息已经更新完毕
- low[x]=min(low[x],low[v]);//用儿子更新父亲
- }
- else if(ru[v])//儿子不在环上,因为环上的点low是没有意义的
- {
- low[x]=min(low[x],dfn[v]);
- }
- }
- if(dfn[x]==low[x])//说明这是一个环
- {
- belong[x]=++qw;//qw是环的个数
- while()
- {
- int y=st[top--];
- ru[y]=;
- belong[y]=qw;
- ans[qw]++;
- if(x==y) break;
- }
- }
- }
- int main()
- {
- scanf("%d%d",&n,&m);
- for(int i=;i<=m;i++)
- {
- int a,b;
- scanf("%d%d",&a,&b);
- add(a,b);//时刻注意是有向边
- }
- for(int i=;i<=n;i++)
- {
- if(!dfn[i]) dfs(i);//此操作是防止图不连通
- }
- for(int i=;i<=n;i++)
- {
- for(int p=last[i];p;p=pre[p])
- {
- int v=other[p];
- if(belong[i]!=belong[v])//实际上可以把一个环看成一个点(子环就是一个点)
- {
- chu[belong[i]]++;//有向边
- }
- }
- }
- int p=;//因为要所有牛都喜欢,所以只允许一个环的出现
- for(int i=;i<=qw;i++)
- {
- if(!chu[i])
- {
- if(p!=)
- {
- printf("0\n");
- return ;
- }
- p=i;
- }
- }
- printf("%d\n",ans[p]);
- return ;
- }
- /*
- tarjan求强连通分量;
- 这个板子就是在一个有向图中,找到一个所有点直接或间接指向的一个点
- (实际上可以是一个环,可以想象一个有向环,上面有许多“枝条”,
- 这样所有环上的点都直接或间接指向环上的点,然后所有枝条上的点都直接或间接指向环上的点;
- 那么环上的点就是那些所有点都直接或间接指向的)
- */
tarjan求强连通分量(模板)的更多相关文章
- tarjan求强连通分量模板
什么是强连通分量? 百度百科 有向图强连通分量:在有向图G中,如果两个顶点vi,vj间(vi>vj)有一条从vi到vj的有向路径,同时还有一条从vj到vi的有向路径,则称两个顶点强连通(stro ...
- Tarjan求强连通分量、求桥和割点模板
Tarjan 求强连通分量模板.参考博客 #include<stdio.h> #include<stack> #include<algorithm> using n ...
- tarjan求强连通分量+缩点+割点以及一些证明
“tarjan陪伴强联通分量 生成树完成后思路才闪光 欧拉跑过的七桥古塘 让你 心驰神往”----<膜你抄> 自从听完这首歌,我就对tarjan开始心驰神往了,不过由于之前水平不足,一 ...
- tarjan求强连通分量+缩点+割点/割桥(点双/边双)以及一些证明
“tarjan陪伴强联通分量 生成树完成后思路才闪光 欧拉跑过的七桥古塘 让你 心驰神往”----<膜你抄> 自从听完这首歌,我就对tarjan开始心驰神往了,不过由于之前水平不足,一 ...
- UVALive 4262——Trip Planning——————【Tarjan 求强连通分量个数】
Road Networks Time Limit:3000MS Memory Limit:0KB 64bit IO Format:%lld & %llu Submit Stat ...
- UESTC 901 方老师抢银行 --Tarjan求强连通分量
思路:如果出现了一个强连通分量,那么走到这个点时一定会在强连通分量里的点全部走一遍,这样才能更大.所以我们首先用Tarjan跑一遍求出所有强连通分量,然后将强连通分量缩成点(用到栈)然后就变成了一个D ...
- Tarjan求强连通分量,缩点,割点
Tarjan算法是由美国著名计算机专家发明的,其主要特点就是可以求强连通分量和缩点·割点. 而强联通分量便是在一个图中如果有一个子图,且这个子图中所有的点都可以相互到达,这个子图便是一个强连通分量,并 ...
- HDU 1827 Summer Holiday(tarjan求强连通分量+缩点构成新图+统计入度+一点贪心思)经典缩点入门题
Summer Holiday Time Limit: 10000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)T ...
- CCF 高速公路 tarjan求强连通分量
问题描述 某国有n个城市,为了使得城市间的交通更便利,该国国王打算在城市之间修一些高速公路,由于经费限制,国王打算第一阶段先在部分城市之间修一些单向的高速公路. 现在,大臣们帮国王拟了一个修高速公路的 ...
随机推荐
- 解决 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 以及MyBatis批量加载xml映射文件的方式
错误 org.apache.ibatis.binding.BindingException: Invalid bound statement (not found) 的出现,意味着项目需要xml文件来 ...
- 从业务流程角度:分析TMS系统各个功能模块
TMS的主要功能是协调承运商.运营商.货主三种角色人员分工合作共同完成运输任务,并实现对运输任务的跟踪管理.本文将按照业务流程顺序对TMS系统各个功能模块进行分析说明. 一.业务描述 新零售的兴起及& ...
- 怎样理解window.name
window.name表示当前窗口的名字, 而非网页的名字, 网页的名字需要使用: document.title; window.name一般是空的字符串, 他的作用其实是配合配合超链接和表单的tar ...
- [Vue]axios 发出请求的config
这些是用于发出请求的可用配置选项. 只有url是必需的. 如果未指定方法,请求将默认为GET. { // `url`是将用于请求的服务器URL url: '/user', // `method`是发出 ...
- office2019激活码 最新各个版本激活码
office2019专业版激活码 激活秘钥 一.office2019激活6月更新 [Key]:F4QWT-NMMKH-XPTV9-W9HFB-B4JCQ [剩余次数:900000+] office20 ...
- C#通过地址获取省市区(基于百度地图API)
最近公司有个需求,想通过地址获取对应的省市区,本来想直接通过对地址的截取,对于完整的地址还可以,不完整的就没法用了 所以本篇通过百度地图API来获取地址 第一步:申请ak密钥 登录百度地图开放平台,按 ...
- Python考试_第三次
- python 全栈11期月考题 一 基础知识:(70分) 1.文件操作有哪些模式?请简述各模式的作用(2分) 2.详细说明tuple.list.dict的用法,以及它们的特点(3分) 3.解释生成 ...
- ipp 实现图像空间的转换
下载:https://software.intel.com/en-us/parallel-studio-xe/choose-download/free-trial-cluster-windows-c- ...
- 媲美pandas的数据分析工具包Datatable
1 前言 data.table 是 R 中一个非常通用和高性能的包,使用简单.方便而且速度快,在 R 语言社区非常受欢迎,每个月的下载量超过 40 万,有近 650 个 CRAN 和 Biocondu ...
- Bootstrap+Hbuilder
出处:http://blog.csdn.net/antony9118/article/details/52189525 1 BootStrap的优点 BootStrap是现在最受欢迎的前端框架,对cs ...