Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- int n, m;
- vector <vector <int> > graf;
- vector <int> colours;
- vector <int> cycle;
- bool dfs(int v) {
- colours[v] = 2;
- for (int i = 0; i < graf[v].size(); i++) {
- if (colours[graf[v][i]] == 1) {
- if (dfs(graf[v][i])) {
- cycle.push_back(v);
- return true;
- }
- }
- else if (colours[graf[v][i]] == 2) {
- cycle.push_back(v);
- return true;
- }
- }
- colours[v] = 3;
- return false;
- }
- int main() {
- cin >> n >> m;
- graf.resize(n);
- colours.resize(n);
- int v1, v2;
- colours.assign(n, 1);
- for (int i = 0; i < m; i++) {
- cin >> v1 >> v2;
- graf[v1 - 1].push_back(v2 - 1);
- }
- int t = 0;
- for (int i = 0; i < n; i++) {
- if (colours[i] == 1 && dfs(i)) {
- t = 1;
- break;
- }
- }
- if (t == 0) cout << "NO";
- else {
- cout << "YES\n";
- for (int i = cycle.size() - 1; i >= 0; --i) {
- cout << cycle[i] + 1 << " ";
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement