【tyvj1322】【模板】危险的桥 tarjan找桥
2015-11-04 17:00
302 查看
又是一个模板题…
代码:
代码:
[code]#include<cstdio> #include<iostream> #include<cstring> #include<algorithm> using namespace std; const int SIZE=100010; int head[SIZE],nxt[SIZE],tot=0; struct edge{ int f,t; }l[SIZE],ans[SIZE]; bool cmp(edge a,edge b) { if(a.f!=b.f) return a.f<b.f; return a.t<b.t; } void build(int f,int t) { l[++tot].t=t; l[tot].f=f; nxt[tot]=head[f]; head[f]=tot; } int low[SIZE],dfn[SIZE],dfs_clock=0; bool qiao[SIZE]; void dfs(int u,int fa) { dfn[u]=low[u]=++dfs_clock; for(int i=head[u];i;i=nxt[i]) { int v=l[i].t; if(!dfn[v]) { dfs(v,u); low[u]=min(low[u],low[v]); if(low[v]>dfn[u]) qiao[i]=1; } else if(dfn[v]<dfn[u]&&v!=fa) { low[u]=min(low[u],dfn[v]); } } } int n,m; bool maps[233][233]; int main() { scanf("%d%d",&n,&m); for(int i=1;i<=m;i++) { int a,b; scanf("%d%d",&a,&b); build(a,b); build(b,a); maps[a][b]++; maps[b][a]++; } for(int i=1;i<=n;i++) if(!dfn[i]) dfs(i,0); int cnt=0; for(int i=1;i<=tot;i++) { if(qiao[i]) { if(l[i].f>l[i].t) swap(l[i].f,l[i].t); if(maps[l[i].f][l[i].t]==1) ans[++cnt]=l[i]; } } sort(ans+1,ans+1+cnt,cmp); for(int i=1;i<=cnt;i++) { if(ans[i].f==ans[i-1].f&&ans[i].t==ans[i-1].t) continue; printf("%d %d\n",ans[i].f,ans[i].t); } return 0; }
相关文章推荐
- How to Determine the Version of Oracle XML Publisher for Oracle E-Business Suite 11i and Release 12 (Doc ID 362496.1)
- 多线程笔记小记
- 获取当前时间的MySql时间函数
- 关于访问asp.net网站时登录后的奇怪问题
- django执行过程
- A Summaryof JDBC
- php学习笔记 面向对象中[接口]与[多态性]的应用
- KMP之自创匹配- -
- Android4.4编译错误(ubuntu 12.04 64位)lzop: not found
- 剖析OutOfMemoryError: PermGen space产生原因及解决方法
- cookie和session机制详解
- cookie和session机制详解
- Web开发(Servlet)(一)
- 使用AIDL实现进程间通信
- sql 执行时字符串转义
- Android 适配魅族去掉smartbar
- 使用python将json存入数据库
- 数据库事务的隔离机制
- SQL练习
- java中堆和栈的区别