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], vertex[MAXV];
- int dfscounter, V, cont, dfsRoot, rootChildren;
- void artvertex(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;
- if (u == dfsRoot)
- rootChildren++;
- artvertex(v);
- if (dfs_low[v] >= dfs_num[u])
- vertex[u] = true;
- 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] = vertex[i] = 0;
- dfs_num[i] = -1;
- }
- rep(i,0,V)
- if (dfs_num[i] == -1) {
- dfsRoot = i; rootChildren = 0;
- artvertex(i);
- vertex[dfsRoot] = (rootChildren > 1);
- }
- int ans = 0;
- rep(i,0,V)
- if (vertex[i])
- ans++;
- printf("%d",ans);
- }
Advertisement
Add Comment
Please, Sign In to add comment