Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- vector<int> adj[MAXV];
- int dfs_num[MAXV], dfs_low[MAXV], dfs_parent[MAXV];
- int dfscounter, V, dfsRoot, rootChildren, ans;
- void pontes(int u) {
- dfs_low[u] = dfs_num[u] = dfscounter++;
- int tam = adj[u].size();
- rep(j,0,tam){
- int v = adj[u][j];
- if (dfs_num[v] == -1) {
- dfs_parent[v] = u;
- pontes(v);
- if (dfs_low[v] > dfs_num[u]){
- ans++;
- cout<<"Ponte entre "<<v<<" - "<<u<<endl;
- }
- dfs_low[u] = min(dfs_low[u], dfs_low[v]);
- }
- else if (v != dfs_parent[u])
- dfs_low[u] = min(dfs_low[u], dfs_num[v]);
- }
- }
- int main(){
- rep(i,0,V+1){
- dfs_low[i] = dfs_parent[i] = 0;
- dfs_num[i] = -1;
- }
- ans = 0;
- rep(i,0,V)
- if (dfs_num[i] == -1) {
- dfsRoot = i;
- pontes(i);
- }
- printf("%d\n",ans);
- }
Advertisement
Add Comment
Please, Sign In to add comment