題目鏈結
題目大意:求給出的有向圖是否為乙個強聯通圖
解題思路:tarjan的入門題,對於tarjan的理解關鍵是low陣列與dfn陣列的理解,前乙個是當前搜尋樹的第一次掃瞄的tot值,也就是最早的時間戳,我們整個演算法就是為了更新它!而dfn是每個點被搜的時間節點,顯然,每個點的dfn都不同並且dfn[i] >= low[i]。由於tarjan是基於深度優先搜尋的演算法,所以被搜的點的先後次序我們可以用乙個棧維護達到還原每個強連通分量的目的!特別的,篩去所有強連通分量的剩下的節點每個都是乙個強連通分量!
code:
#include
using
namespace std;
const
int maxn =
(int
)1e4+5
;int n,m,tot;
bool vist[maxn]
;int dfn[maxn]
,low[maxn]
;vector<
int> e[maxn]
;stack<
int> st;
void
init()
memset
(vist,
false
,sizeof
(vist));
memset
(dfn,0,
sizeof
(dfn));
memset
(low,0,
sizeof
(low));
tot =0;
while
(!st.
empty()
)int u,v;
for(
int i =
1; i <= m; i++)}
void
tarjan
(int u)
else
if(vist[v])}
if(low[u]
== dfn[u])}
}int
main()
}if(flag)
printf
("no\n");
else
printf
("yes\n");
}return0;
}
hdu1269 強連通分量tarjan
problem description 為了訓練小希的方向感,gardon建立了一座大城堡,裡面有n個房間 n 10000 和m條通道 m 100000 每個通道都是單向的,就是說若稱某通道連通了a房間和b房間,只說明可以通過這個通道由a房間到達b房間,但並不說明通過它可以由b房間到達a房間。gar...
強連通分量tarjan模板hdu1269迷宮城堡
第一次寫強連通tarjan同時也是自己在hdu100題的記錄 在有向圖中的強連通分量,核心是深搜,dfn陣列記錄搜尋順序,low陣列所能返回的最小的點 include include include includeusing namespace std vectorg 10003 int dfn 1...
hdu1269強連通分量入門題
為了訓練小希的方向感,gardon建立了一座大城堡,裡面有n個房間 n 10000 和m條通道 m 100000 每個通道都是單向的,就是說若稱某通道連通了a房間和b房間,只說明可以通過這個通道由a房間到達b房間,但並不說明通過它可以由b房間到達a房間。gardon需要請你寫個程式確認一下是否任意兩...