Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int dfs_num[mx], dfs_cnt, dfs_low[mx], dfs_parent[mx], n;
- vector < pair<int, int> > critical;
- vector <int> graph[mx];
- void bridges(int u);
- void init(){
- memset(dfs_num, 0, sizeof dfs_num);
- dfs_cnt = 1;
- for(int i=1;i<=n;i++){
- if(dfs_num[i]==0){
- bridges(i);
- }
- }
- }
- void bridges(int u){
- dfs_low[u] = dfs_num[u] = dfs_cnt++;
- for(int i=0;i<graph[u].size();i++){
- if(dfs_num[graph[u][i]]==0){
- dfs_parent[graph[u][i]] = u;
- bridges(graph[u][i]);
- if(dfs_low[graph[u][i]]>dfs_num[u]){
- critical.push_back({min(u, graph[u][i]),max(u, graph[u][i])});
- }
- dfs_low[u] = min(dfs_low[u], dfs_low[graph[u][i]]);
- }
- else if(dfs_parent[u]!=graph[u][i]){
- dfs_low[u] = min(dfs_low[u], dfs_num[graph[u][i]]);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement