Online Judge | Problem Set | Authors | Online Contests | User | ||||||
---|---|---|---|---|---|---|---|---|---|---|
Web Board Home Page F.A.Qs Statistical Charts | Current Contest Past Contests Scheduled Contests Award Contest |
OLE????....不就是求桥吗????#include <iostream> #define MAXN 1010 using namespace std; int deg[MAXN]; int s[MAXN]; int low[MAXN]; int g[MAXN][MAXN]; int v_stack[MAXN],w_stack[MAXN]; int dfn; int n_stack; int dfs(int v,int pre) { int i,w; int cnt; dfn++; low[v]=s[v]=dfn; for(i=1;i<=deg[v];i++) { w=g[v][i]; if(s[w]<s[v] && w!=pre) //反向边 { v_stack[n_stack]=v; w_stack[n_stack]=w; n_stack++; } if(s[w]==0)//前向边 { dfs(w,v); if(low[w]>=s[v]) { //找到新的连通分支 cnt=0; while(v_stack[n_stack-1]!=v || w_stack[n_stack-1]!=w) { cout<<v_stack[n_stack-1]<<" "<<w_stack[n_stack-1]<<endl; n_stack--; cnt++; } cout<<v_stack[n_stack-1]<<" "<<w_stack[n_stack-1]<<endl; if(cnt==0) { cout<<w_stack[n_stack-1]<<" "<<v_stack[n_stack-1]<<endl; } n_stack--; } else{ low[v]=low[v]<low[w]?low[v]:low[w]; } } else{ low[v]=low[v]<s[w]?low[v]:s[w]; } } } int main() { int i,j,m,n,cases=1; while(cin>>n>>m) { if(m==n && n==0) break; memset(deg,0,sizeof(deg)); memset(low,0,sizeof(low)); memset(s,0,sizeof(s)); memset(v_stack,0,sizeof(v_stack)); memset(w_stack,0,sizeof(w_stack)); memset(g,0,sizeof(g)); for(int a=0;a<m;a++) { cin>>i>>j; deg[i]++;deg[j]++; g[i][deg[i]]=j; g[j][deg[j]]=i; } n_stack=1; dfn=0; cout<<cases++<<endl<<endl; dfs(1,-1); cout<<"#"<<endl; } } Followed by: Post your reply here: |
All Rights Reserved 2003-2013 Ying Fuchen,Xu Pengcheng,Xie Di
Any problem, Please Contact Administrator