tarjan 算法模板
做了一些树形DP实在不想做了看到von在玩tarjan算法,好像放假之前看过关于rmq 以及tarjan算法的说明只是没具体弄明白。今天看了一下von分享的资料不错。找了一个模板题就当tarjan算法的模板吧
http://acm.hdu.edu.cn/showproblem.php?pid=1269
判断是否为强连通图 bcnt == 1只有一个强连通分量且为自己 bcnt >1 存在多个强连通分量
#include <cstdio>#include <iostream>#include <cstring>#include <vector>#define maxn 10007using namespace std;vector<int>g[maxn];int DFN[maxn],LOW[maxn],Belong[maxn],stack[maxn];bool instack[maxn];int n,m;int bcnt,top,index;void tarjan(int i){int j; DFN[i] = LOW[i] = ++index; stack[++top] = i; instack[i] = true;int size = g[i].size();for (int k = 0; k < size; ++k) { j = g[i][k];if(!DFN[j]) { tarjan(j);if(LOW[j] < LOW[i]) LOW[i] = LOW[j]; }else if(instack[j] && DFN[j] < LOW[i]) { LOW[i] = DFN[j]; } }if(DFN[i] == LOW[i]) { bcnt ++;do { j = stack[top--]; instack[j] = false; Belong[j] = bcnt; }while(j != i); }}void solve(){int i; bcnt = top = index = 0;for (i = 1; i <= n; ++i) {if(!DFN[i]) tarjan(i); }if(bcnt == 1) printf("Yes\n");else printf("No\n");}int main(){int i,x,y;while(cin>>n>>m) {if(!n && !m) break;for (i = 0; i <= n; ++i) { DFN[i] = LOW[i] = Belong[i] = 0; instack[i] = false; g[i].clear(); }for (i = 0; i < m; ++i) { cin>>x>>y; g[x].push_back(y); } solve();/*for (i = 1; i <= n; ++i) { printf("%d ",Belong[i]); } printf("\n");*/ }return 0;}
tarjan 算法模板相关推荐
- CSP认证201509-4 高速公路[C++题解]:强连通分量、tarjan算法模板题
题目分析 来源:acwing 分析: 所求即为强连通分量的个数,然后计算每个强连通分量中点的个数,相加即可. 所谓强连通分量,它是一个子图,其中任意两点可以相互到达,并且再加一个点,就不能满足任意两点 ...
- 【HDU - 1269】迷宫城堡 (tarjan算法模板)
题干: 为了训练小希的方向感,Gardon建立了一座大城堡,里面有N个房间(N<=10000)和M条通道(M<=100000),每个通道都是单向的,就是说若称某通道连通了A房间和B房间,只 ...
- poj1236 Tarjan算法模板 详解
思想: 做一遍DFS,用dfn[i]表示编号为i的节点在DFS过程中的访问序号(也可以叫做开始时间)用low[i]表示i节点DFS过程中i的下方节点所能到达的开始时间最早的节点的开始时间.初始时dfn ...
- Tarjan算法_LCA
参考资料:Tarjan算法_LCA tarjan算法求LCA Tarjan 算法&模板 只是对其中的代码进行一下注释,如有错误还得回来再改. //不怕别人比你聪明,就怕别人比你聪明还比你努 ...
- 洛谷 P3388 【模板】割点(割顶) 根+非根+dfn[]+low[]+不一样的Tarjan算法
洛谷 P3388 [模板]割点(割顶) 根+非根+dfn[]+low[]+不一样的Tarjan算法 Tarjan算法,详见https://blog.csdn.net/mrcrack/article ...
- Tarjan算法 —— 强连通双连通缩点 模板
TP 强连通缩点模板 双连通缩点模板 边双连通 点双连通 有向图 我们知道在一张 有向无环 图(也叫 DAG)中,肯定存在拓扑序.拓扑序的特殊顺序性质,能够允许我们在 O(n+m)O(n + m)O( ...
- tarjan算法 割点割边强联通 算法讲解模板 自用整理
很早就学过tarjan算法(割点割边与强联通)了,但是因为久不用老是忘,也有收藏过几篇不错的博客,但是每次需要时都要翻出那几篇太麻烦了,所以自己开篇记录方便自己的复习.图片和部分文字来源自其他博客,文 ...
- Tarjan 算法思想求强连通分量及求割点模板(超详细图解)
割点定义 在一个无向图中,如果有一个顶点,删除这个顶点及其相关联的边后,图的连通分量增多,就称该点是割点,该点构成的集合就是割点集合.简单来说就是去掉该点后其所在的连通图不再连通,则该点称为割点. 若 ...
- 洛谷P3387 【模板】缩点 (tarjan算法)
输入: 2 2 1 1 1 2 2 1 输出: 2 解题思路:首先来说一下这个题为什么要缩点.题目中说会给定一个有向图,所以是 有可能会形成环的,又因为题目要我们求出路径上经过点的权值和最大,如果有环 ...
- tarjan算法不是很懂先mark一下。
前面为转载的.后面是自己的理解. 三种tarjan算法(上) .这篇算是做一个总结吧. 求强连通分量 求无向图的割和桥 最近公共祖先 求强连通分量 基本概念: 强连通是有向图才有的概念. ...
最新文章
- 我什么都没做,文章就自动变成了视频?AI神器解放视频编辑丨百度研究院出品...
- 【Android 高性能音频】AAudio 音频流 PCM 采样 的 采样 缓冲 播放 的 连续机制 ( 数据回调机制 | 数据回调函数指针 | 实现数据回调函数 | 设置数据回调函数 )
- 解析XML的4种方式及优缺点比较
- java实现dvd租赁系统_Java编写汽车租赁系统
- ubuntu20.04安装deepin qq
- 排队论游乐场的游乐项目_外汇游乐场
- 阿里P7亲自教你!我的头条面试经历分享,完整PDF
- POJ 3258 River Hopscotch
- 目标检测第7步:如何在Windows 10下,配置Pycharm中的YOLOv5(5.0)虚拟环境?
- Java从零开始学十四(包和访问控制)
- Linux内核分析 - 网络[四补]:路由表补充
- iptables 从入门到应用
- 实验一:marlab安装调试
- 104规约(持续更新....)
- 【微信公众号后台基础能力接口对接】
- socket 读、写字节流数据
- android 360锁屏清除,“打盹”省电 360清理大师锁屏清理早已实现
- vue的h函数_vue 中的h函数
- MT2523用户手册,MT2523设计指南资料
- print 设置纸张的高度_祝贺! 2020珠峰高程测量登山队成功登顶!用Python计算一张纸对折多少次会超过珠峰高度?...