Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- #include <iostream>
- #include <vector>
- #include <string>
- #include <iomanip>
- #include <algorithm>
- #include <vector>
- #include <stack>
- #include <set>
- #include <queue>
- #include <stack>
- #include <map>
- #include <deque>
- #include <bitset>
- #include <tuple>
- //#include <math.h>
- #define ull int long long
- #define ll long long
- #define ld long double
- #define MAX 2e9
- #define MIN -2e9
- #define PI 3.14159265
- #define fst first
- #define scd second
- #define mp make_pair
- #define forn(i, x) for(int i = 0; i < x; i++)
- #define pb push_back
- using namespace std;
- int n, m, s, t;
- vector< vector< int > > g;
- vector< int > color;
- int st = -1, ed = -1;
- vector< int> ans;
- bool dfs(int v) {
- color[v] = 1;
- for(int i = 0; i < g[v].size(); i++) {
- int to = g[v][i];
- if(color[to] == 0) {
- bool state = dfs(to);
- if(state) {
- ans.pb(v);
- return true;
- }
- } else if(color[to] == 1) {
- st = v;
- ans.pb(v);
- return true;
- }
- }
- color[v] = 2;
- return false;
- }
- int main() {
- // freopen("cycle.in", "r", stdin);
- // freopen("cycle.out", "w", stdout);
- ios_base::sync_with_stdio(false);
- cin.tie(NULL);
- cin >> n >> m;
- g.resize(n + 1);
- color.resize(n + 1, 0);
- for(int i = 0; i < m; i++) {
- int a, b;
- cin >> a>> b;
- g[a].pb(b);
- }
- for(int i = 0; i <= n; i++) {
- if(dfs(i)) {
- cout << "YES\n";
- reverse(ans.begin(), ans.end());
- for(int j = 0; j < ans.size(); j++) {
- cout << ans[j] << " ";
- }
- return 0;
- }
- }
- cout << "NO";
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement