Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <bits/stdc++.h>
- using namespace std;
- bool used[200008] , used1[200008];
- vector <int> g[200008],r;
- map <pair<int, int>, int> z;
- int timer = 0, fup[200008], tin[200008];
- void dfs (int v, int p ){
- used[v] = 1;
- int childs = 0;
- tin[v]= fup[v] = timer++;
- for(int i =0; i < g[v].size(); i++){
- int to = g[v][i];
- if(to == p){
- continue;
- }
- if(used[to]){
- fup[v] = min(fup[v], tin[to]);
- }
- else{
- dfs(to, v);
- fup[v] = min(fup[v], fup[to]);
- if(fup[to] >= tin[v] && p != -1 && !used1[v]){
- r.push_back(v);
- used1[v] = 1;
- }
- childs++;
- }
- }
- if (p == -1 && childs > 1 && !used1[v]){
- r.push_back(v);
- used1[v] = 1;
- }
- }
- int main()
- {
- freopen("points.in", "r", stdin);
- freopen("points.out", "w", stdout);
- ios::sync_with_stdio(0);
- cin.tie(0);
- int n, m;
- cin >> n >> m;
- for(int i =1; i <=m; i++){
- int L, R;
- cin >> L >> R;
- g[L].push_back(R);
- g[R].push_back(L);
- }
- dfs(1, -1);
- sort(r.begin(), r.end());
- cout << r.size() << endl;
- for(int i =0; i < r.size(); i++){
- cout << r[i] << endl;
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement