無向圖求割邊

 1 //無向圖求割邊
 2 #include <cstdio>
 3 #include <cstdlib>
 4 #include <cstring>
 5 #include <cmath>
 6 #include <algorithm>
 7 #include <queue>
 8 #include <stack>
 9 #include <vector>
10 #include <deque>
11 #include <map>
12 #include <iostream>
13 using namespace std;
14 typedef long long LL;
15 const double pi = acos(-1.0);
16 const double e = exp(1);
17 //const int MAXN =2e5+10;
18 const LL N = 1000000007;
19 
20 struct edge{
21     int w;
22     int to;
23     int next;    
24 }edge[200009];
25 int head[200009];
26 
27 int dfn[100009];
28 int low[100009];
29 int cnt = 1;
30 
31 void tarjan(int u, int fa)
32 {
33     
34     int i;
35     low[u] = dfn[u] = cnt++;
36     for(i = head[u]; i != -1; i = edge[i].next)
37     {
38         //cout << u << " " << fa << endl;
39         int v = edge[i].to;
40         if(!dfn[v])
41         {
42             //cout << "** " <<  v << " " << u << endl;
43             tarjan(v, u);
44             low[u] = min(low[u], low[v]);
45             if(low[v] > dfn[u])
46             {
47                 printf("%d ---> %d\n", u, v);
48             } 
49         }
50         else if(v != fa)
51         {
52             low[u] = min(low[u], dfn[v]);
53         }
54     }
55 }
56 
57 int main()
58 {
59     int n,m, i;
60     int cnt1, a, b;
61     while(scanf("%d%d", &n,&m) != EOF)
62     {
63         if(n == 0 && m == 0)
64             break;
65         cnt1 = 0;
66         cnt = 1;
67         memset(head, -1, sizeof(head));
68         memset(dfn, 0, sizeof(dfn));
69         memset(low, 0, sizeof(low));
70         while(m--)
71         {
72             scanf("%d%d", &a,&b);
73             
74             edge[cnt1].to = b;
75             edge[cnt1].next = head[a];
76             head[a] = cnt1++;
77 
78             edge[cnt1].to = a;
79             edge[cnt1].next = head[b];
80             head[b] = cnt1++;
81         }
82         for(i = 1; i <= n; i++)
83         {
84             if(!dfn[i])
85             {
86                 tarjan(i, 0);
87             }
88         }
89         
90     }
91     return 0;
92 }

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章