Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stack>
- #include <math.h>
- #include <time.h>
- #include <iostream>
- #include <algorithm>
- #include <string>
- #include <set>
- #include <iomanip>
- #include <vector>
- #include <map>
- #include <cassert>
- #include <queue>
- #include <fstream>
- using namespace std;
- typedef long long li;
- typedef long double ld;
- #define forn(i, n) for (int i = 0; i < int(n); ++i)
- #define pb push_back
- #define mp make_pair
- #define all(v) v.begin(),v.end()
- #define EPS 1e-9
- #define PI 3.1415926535897932384626433832795
- const int MAXN = 20000;
- vector <int> g[MAXN];
- bool used[MAXN];
- int depth[MAXN], fup[MAXN];
- vector <int> ans;
- void dfs (int v, int p = -1) {
- used[v] = true;
- fup[v] = depth[v];
- int children = 0;
- 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], depth[to]);
- else {
- depth[to] = depth[v] + 1;
- dfs (to, v);
- fup[v] = min (fup[v], fup[to]);
- if (fup[to] >= depth[v] && p != -1)
- ans.push_back(v);
- children++;
- }
- }
- if (p == -1 && children > 1)
- ans.push_back(v);
- }
- int main () {
- #ifdef _DEBUG
- freopen("input.txt", "r", stdin);
- //freopen("output.txt", "w", stdout);
- #endif
- int n, m;
- cin >> n >> m;
- forn (i, m) {
- int a, b;
- cin >> a >> b;
- a--, b--;
- g[a].push_back(b);
- g[b].push_back(a);
- }
- for (int i = 0; i < n; i++) {
- if (!used[i])
- dfs(i);
- }
- cout << ans.size() << endl;
- sort(all(ans));
- forn (i, ans.size())
- cout << ans[i] + 1 << endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement