炸铁路
Posted 66dzb
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了炸铁路相关的知识,希望对你有一定的参考价值。
[Time Gate]
https://www.luogu.org/problemnew/show/P1656
【解题思路】
割点+桥模板题
关键在于排序用下标排序记录
【code】
#include <cstdio> #include <iostream> #include <algorithm> using namespace std; struct Node int s; int t; int nxt; a[1000005]; inline int Min(int a,int b) return a<b?a:b; int n,m,cnt,tot; int dfn[1000005],low[1000005],head[1000005],p[1000005]; inline void Add(int u,int v) a[++cnt].s=u; a[cnt].t=v; a[cnt].nxt=head[u]; head[u]=cnt; return ; inline void Tarjan(int u,int fa) dfn[u]=low[u]=++cnt; for(register int i=head[u];i;i=a[i].nxt) int v=a[i].t; if(!dfn[v]) Tarjan(v,u); low[u]=Min(low[u],low[v]); if(dfn[u]<low[v])p[++tot]=i; else if(v!=fa) low[u]=Min(low[u],dfn[v]); inline bool cmp(int x,int y) if(a[x].s==a[y].s)return a[x].t<a[y].t; return a[x].s<a[y].s; int main() scanf("%d%d",&n,&m); for(register int i=1;i<=m;i++) int a,b; scanf("%d%d",&a,&b); Add(a,b); Add(b,a); for(register int i=1;i<=n;i++) if(!dfn[i])Tarjan(i,0); sort(p+1,p+tot+1,cmp); for(register int i=1;i<=tot;i++) printf("%d %d\n",a[p[i]].s,a[p[i]].t); return 0;
以上是关于炸铁路的主要内容,如果未能解决你的问题,请参考以下文章