Advertisement
Mirbek

Поиск цикла

Jan 9th, 2022
1,040
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.07 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. const int N = 1e5 + 6;
  6.  
  7. int n, m;
  8. int used[N], par[N];
  9. vector <int> g[N];
  10.  
  11. void dfs(int v) {
  12.     used[v] = 1;
  13.     for (int i = 0; i < g[v].size(); i++) {
  14.         int to = g[v][i];
  15.         if (used[to] == 1) {
  16.             cout << "YES\n";
  17.             vector <int> path;
  18.             int x = v;
  19.             while (true) {
  20.                 path.push_back(x);
  21.                 if (x == to) break;
  22.                 x = par[x];
  23.             }
  24.             reverse(path.begin(), path.end());
  25.             for (int i = 0; i < path.size(); i++) {
  26.                 cout << path[i] << " ";
  27.             }
  28.             exit(0);
  29.         }
  30.         if (used[to] == 0) {
  31.             par[to] = v;
  32.             dfs(to);
  33.         }
  34.     }
  35.     used[v] = 2;
  36. }
  37.  
  38. int main(){
  39.     cin >> n >> m;
  40.  
  41.     for (int i = 1; i <= m; i++) {
  42.         int a, b;
  43.         cin >> a >> b;
  44.         g[a].push_back(b);
  45.     }
  46.  
  47.     for (int i = 1; i <= n; i++) {
  48.         if (used[i] == 0) {
  49.             dfs(i);
  50.         }
  51.     }
  52.  
  53.     cout << "NO\n";
  54. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement