割边
来源:互联网 发布:breed mac地址修改 编辑:程序博客网 时间:2024/05/01 09:05
#include <iostream>#include <stdio.h>#include <algorithm>#include <string.h>#include <vector>#include <stack>using namespace std;const int maxn=100020;vector<int> g[maxn];int n;int low[maxn],dfn[maxn];int d_cnt=0;int num=0;struct node{ int u,v;}w[maxn];bool cmp(struct node a,struct node b){ if(a.u!=b.u) return a.u<b.u; return a.v<b.v;}void dfs(int u,int pre){ low[u] = dfn[u] = ++d_cnt; for(int i=0;i<g[u].size();++i) { int v=g[u][i]; if(v==pre) continue; if(!dfn[v]) { dfs(v,u); low[u]=min(low[u],low[v]); if(low[v]>dfn[u]) { if(u<v) { w[num].u=u ;w[num].v=v;} else { w[num].v=u; w[num].u=v; } num++; } } else low[u]=min(low[u],dfn[v]); }}void tarjan(){ memset(dfn,0,sizeof(dfn)); memset(low,0,sizeof(low)); d_cnt=0; num=0; for(int i=1;i<=n;++i) { if(!dfn[i]) dfs(i,i); } printf("%d critical links\n",num); sort(w,w+num,cmp); for(int i=0;i<num;++i) { printf("%d - %d\n",w[i].u-1,w[i].v-1); } printf("\n");}int main(){ while(scanf("%d",&n)!=EOF) { for(int i=1;i<=n;++i) g[i].clear(); int u,k,v; for(int i=1;i<=n;++i) { scanf("%d (%d)",&u,&k); u++; for(int j=1;j<=k;++j) { scanf("%d",&v); v++; if(u>=v) continue; g[u].push_back(v); g[v].push_back(u); } } tarjan(); } return 0;}
阅读全文
0 0
- 割点、割边
- 割点、割边
- 割点 割边
- 割点、割边
- 割边
- 割边
- 割边
- 割点和割边
- 割点,割边模板
- 割点&割边模板
- 割点和割边
- 割点 割边 模板
- 割边与割点
- 割点与割边
- 割点、割边、双连通分支
- tarjan算法之 割边,割点
- 割点与割边问题
- 割点与割边练习
- vue filter 过滤器
- HM模型学习(二)
- 给即将开始的新旅程
- 深入理解计算机系统 2
- ZeroMQ 介绍
- 割边
- 基于 mini2440 电阻式触摸屏(一):电阻式触摸屏工作原理
- Python使用urllib库和BeautifulSoup库爬虫总结
- First day lab!
- jqurey
- 安装绿色版MySQL Community Server 5.7.16并实现远程登录
- React 组件声明生命周期
- 第五章 引用类型(上)
- 面向对象的三个基本特征(封装)