Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <cstdio>
- #include <cstdlib>
- #include <cstring>
- #include <string>
- #include <map>
- #include <set>
- #include <vector>
- #include <algorithm>
- #include <queue>
- #include <bitset>
- #include <stack>
- #include <iostream>
- #include <fstream>
- #include <cmath>
- #define sqr(a) ((a)*(a))
- #define odd(a) ((a)&1)
- #define foru(i,n) for (int i=0;i<(n);i++)
- #define ford(i,n) for (int i=(n)-1;i>=0;i--)
- #define forab(i,l,r) for (int i=(l);i<=(r);i++)
- #define forabd(i,r,l) for (int i=(r);i>=(l);i--)
- #define pb push_back
- #define F first
- #define S second
- #define all(x) x.begin(),x.end()
- #define sz(__X) (int)__X.size()
- #define pii pair<int,int>
- #define pb push_back
- #define mp make_pair
- const double eps=1e-19;
- const double PI=acos(-1.0);
- const int INF=1000*1000*1000+7;
- const int MAXN = 200005;
- using namespace std;
- int n,m;
- vector<int> g[MAXN];
- int col[MAXN];
- int pr[MAXN];
- vector<int> ans;
- vector<int> now;
- int cicl_st, cicl_end;
- void update_ans()
- {
- now.clear();
- for (int v=cicl_st; v!=cicl_end; v=pr[v])
- now.pb(v);
- now.pb(cicl_end);
- if (sz(now)>sz(ans))
- {
- ans.clear();
- ans.assign( all(now) );
- }
- }
- void dfs(int v, int pred)
- {
- col[v] = 1;
- for (int j=0; j<sz(g[v]); j++)
- {
- int u=g[v][j];
- if (u==pred) continue;
- if (col[u]==0)
- {
- pr[u] = v;
- dfs(u, v);
- }
- else if (col[u]==1)
- {
- cicl_end = u; cicl_st=v;
- update_ans();
- }
- }
- col[v]=0;
- }
- int main()
- {
- freopen("doggy.in", "r", stdin);
- freopen("doggy.out", "w", stdout);
- scanf("%d %d", &n, &m);
- for (int i=0; i<m; i++)
- {
- int v,u;
- scanf("%d %d", &v, &u);
- v--;u--;
- g[v].pb(u);
- g[u].pb(v);
- }
- ans.pb(0);
- dfs(0, -1);
- printf("%d\n", sz(ans));
- for (int i=0; i<sz(ans); i++)
- printf("%d ", ans[i]+1);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment