fork download
  1. #include <bits/stdc++.h>
  2. #define x 10001
  3. using namespace std;
  4. vector <int> g[x] ;
  5. bool visited[x] , art[x] ;
  6. int low[x] , dis[x] , timer = 0 ;
  7. void dfs(int start , int parent){
  8. visited[start] = true ;
  9. low[start] = dis[start] = timer++ ;
  10. int child = 0 ;
  11. for(int i : g[start]){
  12. if(visited[i]){
  13. low[start] = min(low[start],dis[i]) ;
  14. }
  15. else if(i != parent){
  16. dfs(i , start) ;
  17. low[start] = min(low[start] , low[i]) ;
  18. if(low[i] >= dis[start]) {
  19. art[start] = true ;
  20. }
  21. child++ ;
  22. }
  23. }
  24. if(parent == -1 && child > 1)art[start] = true ;
  25. }
  26. int main() {
  27. // your code goes here
  28. int n , m ;
  29. cin >> n >> m ;
  30. while(m--){
  31. int u , v ;
  32. cin >> u >> v ;
  33. g[u].push_back(v) ;
  34. g[v].push_back(u) ;
  35. }
  36. for(int i = 0 ; i < n ; i ++){
  37. visited[i] = art[i] =false ;
  38. low[i] = dis[i] = - 1 ;
  39. }
  40. for(int i = 0 ; i < n ;i++){
  41. if(!visited[i])
  42. dfs(i , -1) ;
  43. }
  44. for(int i = 0 ; i < n ;i++){
  45. if(art[i])
  46. cout << i << " " ;
  47. }
  48. return 0;
  49. }
Success #stdin #stdout 0s 4432KB
stdin
5 7 
0 1
0 2
1 3
1 2
1 4
3 4
4 2
stdout
0