DSA
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

62 lines
1.0 KiB

  1. #include <iostream>
  2. #include <vector>
  3. #include <algorithm>
  4. #include <set>
  5. using namespace std ;
  6. vector <int> g[20001] ; set<int> ans ;
  7. bool used[20001] ;
  8. int tin[20001] , fup[20001] , timer ;
  9. void dfs(int v, int p = -1)
  10. {
  11. used[v] = 1 ;
  12. tin[v]=fup[v]=timer ,++timer ;
  13. int children = 0 ;
  14. for(int i = 0 ; i < g[v].size() ; ++i)
  15. {
  16. int u = g[v][i] ;
  17. if(u==p)
  18. continue ;
  19. if(used[u])
  20. fup[v]=min(fup[v],tin[u]) ;
  21. else
  22. {
  23. dfs(u,v) ;
  24. fup[v] = min(fup[v],fup[u]) ;
  25. if(tin[v]<=fup[u]&&p!=-1)
  26. {
  27. ans.insert(v) ;
  28. }
  29. ++children ;
  30. }
  31. }
  32. if(children>1&&p==-1)
  33. {
  34. ans.insert(v) ;
  35. }
  36. }
  37. int main()
  38. {
  39. freopen("points.in","r",stdin) ;
  40. freopen("points.out","w",stdout) ;
  41. int n , m ;
  42. cin >> n >> m ;
  43. for(int i = 0 ; i < m ; ++i)
  44. {
  45. int l , r ;
  46. cin >> l >> r ;
  47. g[l].push_back(r) ;
  48. g[r].push_back(l) ;
  49. }
  50. for(int i = 1 ; i <= n ; ++i)
  51. if(!used[i]) dfs(i) ;
  52. cout << ans.size() << '\n' ;
  53. for (std::set<int>::iterator i= ans.begin() ; i != ans.end() ; ++i)
  54. {
  55. cout << (*i) << ' ' ;
  56. }
  57. }