Advertisement
gertsog

sick_duck

Oct 12th, 2019
478
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.08 KB | None | 0 0
  1.     #include <cstdio>
  2.     #include <vector>
  3.     #include <string>
  4.      
  5.     std::vector<std::vector<int>> graph;
  6.     std::vector<short> used;
  7.     std::string res;
  8.      
  9.     void dfs( int v )
  10.     {
  11.       used[v] = 1;
  12.       for (auto to : graph[v])
  13.       {
  14.         switch (used[to])
  15.         {
  16.         case 0:
  17.           dfs(to);
  18.           break;
  19.         case 1:
  20.           printf("-1");
  21.           exit(0);
  22.           break;
  23.         }
  24.       }
  25.       used[v] = 2;
  26.       res += std::to_string(v + 1) + " ";
  27.     }
  28.      
  29.     int main()
  30.     {
  31.       // read graph
  32.       int n = 0, m = 0;
  33.       scanf("%i%i", &n, &m);
  34.       if (n < 1 || m < 0 || n > 1e5 || m > 1e5) { printf("-1"); return 0; }
  35.      
  36.       graph.resize(n);
  37.       for (int k = 0, i = 0, j = 0; k < m; k++)
  38.         scanf("%i%i", &i, &j), graph[i - 1].push_back(j - 1);
  39.      
  40.       // check graph
  41.       used.resize(n);
  42.      
  43.       for (int i = 0; i < n; i++)
  44.         if (!used[i])
  45.           dfs(i);
  46.      
  47.       std::reverse(res.begin(), res.end());
  48.       printf("%s", res.c_str());
  49.      
  50.       return 0;
  51.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement