【CaiOJ】1147 强连通 Tarjan算法
来源:互联网 发布:java mysql学生 编辑:程序博客网 时间:2024/06/06 00:37
昨天没过掉的强联通分量模板题
#include <cstdio>#include <vector>#include <stack>#include <algorithm>#define C (c=nc())using namespace std;int low[20005];int dfn[20005];vector<int>a[20005];bool b[20005];stack<int>s;int m,n,ans,tot,q,w;inline char nc(void){static char ch[100010],*p1=ch,*p2=ch;return p1==p2&&(p2=(p1=ch)+fread(ch,1,100010,stdin),p1==p2)?EOF:*p1++;}inline void read(int &n){static char c;int f=1;n=0;C;while (c<'0'||c>'9') c=='-'?f=-1,C:C;while (c>='0'&&c<='9') n=(n<<3)+(n<<1)+c-48,C;return (void)(n*=f);}void dfs(int x){dfn[x]=low[x]=++tot;b[x]=1;s.push(x);for (int j=0;j<a[x].size();++j){if (dfn[a[x][j]]==0){dfs(a[x][j]);low[x]=min(low[x],low[a[x][j]]);}elseif (b[a[x][j]]){low[x]=min(low[x],dfn[a[x][j]]);}}if (low[x]==dfn[x]){while (x!=s.top()) b[s.top()]=0,s.pop();s.pop();b[x]=0;}return;}int main(void){read(n),read(m);for (int i=1;i<=m;++i){read(q),read(w);a[q].push_back(w);}dfs(1);for (int i=1;i<=n;++i)if (low[i]==dfn[i]) ++ans;printf("%d\n",ans);return 0;}
阅读全文
0 0
- 【CaiOJ】1147 强连通 Tarjan算法
- 强连通算法--Tarjan
- 强连通分量 Tarjan算法
- 强连通分量 tarjan算法
- 强连通分量Tarjan算法
- Tarjan强连通分量算法
- 强连通Tarjan算法入门
- 强连通分量Tarjan算法
- 强连通分量Tarjan算法
- 强连通分量 Tarjan算法
- 强连通分量-tarjan算法
- 强连通分量之tarjan算法
- Tarjan算法求强连通分量
- poj 1236 强连通图 tarjan算法
- POJ 2186 强连通分量 Tarjan算法
- 强连通分量算法Kosaraju 和 Tarjan
- 求强连通分量的Tarjan算法
- HDU4324(强连通的Tarjan算法)
- 字符统计
- [复习]欧几里得 比例简化
- Android 省略号加载动画效果的实现思路
- MySQL的btree索引和hash索引的区别
- spring 4++学习笔记(8-?)
- 【CaiOJ】1147 强连通 Tarjan算法
- mysql优化
- CentOS安装Docker详细教程
- Android之jar包生成
- android 圆角图片实现(二)
- springboot实现定时任务
- 使用getopt_long()从命令行获取参数,struct option
- 选择器的优先级问题
- 一个自定义的折线图