Tarjian【Template】
来源:互联网 发布:手机wifi网络看视频卡 编辑:程序博客网 时间:2024/06/08 16:40
#include<iostream>#include<cstring>using namespace std;const int M = 1e5 + 7;const int N = 1e5 + 7;struct node { int v; int nxt;}e[M];int head[N], cnt;int p[N], st[N], id, top, scc;int dfn[N], low[N], belong[N];void add(int u, int v){ e[cnt].v = v, e[cnt].nxt = head[u]; head[u] = cnt++;}void init(){ memset(head, -1, sizeof(head)); memset(p, 0, sizeof(p)); memset(dfn, 0, sizeof(dfn)); id = top = cnt = 0;}void dfs(int u){ dfn[u] = low[u] = ++id; st[++top] = u, p[u] = 1; int v; for (int i = head[u]; i != -1; i = e[i].nxt) { v = e[i].v; if (!dfn[v]) { dfs(v); if (low[v] < low[u]) low[u] = low[v]; } else if (p[v] && dfn[v] < low[u]) { low[u] = dfn[v]; } } if (dfn[u] == low[u]) { ++scc; do { v = st[top--]; p[v] = 0; belong[v] = scc; } while (v != u); }}void Tarjian(int n){ for (int i = 1; i <= n; i++) { if (!dfn[i]) dfs(i); } cout << scc << endl; for (int i = 1; i <= n; i++) { cout << i << " " << belong[i] << endl; }}int main(){ int n, m, u, v; cin >> n >> m; init(); while (m--) { cin >> u >> v; add(u, v); } Tarjian(n); return 0;}
阅读全文
0 0
- Tarjian【Template】
- hdu 4587 tarjian求割点数目
- hdu 4738 tarjian求桥
- template
- Template
- template
- template
- template
- Template
- template
- template
- Template
- template
- Template
- template
- template
- Template
- template
- Java中blob转base64编码
- kubernetes资源管理
- 高清单端口全接口液晶KVM控制台
- javaScript函数定义
- 商机 | 大数据/政务云采购清单 招标4起,最高招标价为2642.7万(10.14-10.17)
- Tarjian【Template】
- PHP中include()与require()的区别说明
- Laravel通过ajax的POST方式传值并实现页面跳转
- Linux网络协议栈(四)——链路层(1)
- 定制化机房KVM改造方案
- WordPress数据库及各表结构
- ubuntu16.04安装python3 selenium
- Spring3.0配置多个事务管理器(即操作多个数据源)的方法
- android与js之间的交互