bsoj2989 tarjan求桥——图论基础

来源:互联网 发布:mac os sierra怎么升级 编辑:程序博客网 时间:2024/06/16 01:23

看的刘汝佳的代码写的

似乎还是没有理解的很透彻啊。。。。

今天似乎这是第7个题了,还有4个题就进前150名了!

不知道今天还能刷几个图论的水题,就算是打基础吧。。。。

话说今天感觉我生物化学落的有点远了,有必要复习一下。。。

#include<iostream>#include<algorithm>#include<cstring>#include<cstdio>#define MAX 190using namespace std;struct wbysr{int from,to;}ans[4009];int n,m,dfs=0,num=0;int map[MAX][MAX],low[MAX],dfn[MAX];int tarjan(int x,int fa){dfn[x]=low[x]=++dfs;int child=0;for(int i=1;i<=n;i++)if(map[x][i]){if(!dfn[i]){child++;low[i]=tarjan(i,x);low[x]=min(low[x],low[i]);if(low[i]>dfn[x]){num++;ans[num].from=min(x,i);ans[num].to=max(x,i);}}else{if(i!=fa)low[x]=min(low[x],dfn[i]);}}//if(fa<0&&child==1)//num--;return low[x];}bool cmp(wbysr a1,wbysr a2){return(a1.from<a2.from||(a1.from==a2.from&&a1.to<a2.to));}int main(){scanf("%d%d",&n,&m);memset(map,0,sizeof(map));for(int i=1;i<=m;i++){int a1,a2;scanf("%d%d",&a1,&a2);map[a1][a2]=1;map[a2][a1]=1;}tarjan(1,-1);sort(ans+1,ans+num+1,cmp);for(int i=1;i<=num;i++)printf("%d %d\n",ans[i].from,ans[i].to);return 0;}

0 0
原创粉丝点击