Alex_tz307

TopSortQueue

Sep 11th, 2020
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.83 KB | None | 0 0
  1. #include <bits/stdc++.h>
  2.  
  3. using namespace std;
  4.  
  5. #define MAXN 100005
  6.  
  7. ifstream f ("topsort.in");
  8. ofstream g ("topsort.out");
  9.  
  10. int N, M, deg[MAXN], Q[MAXN];
  11. vector < int > G[MAXN];
  12.  
  13. void solve () {
  14.     int i, x;
  15.     vector < int > :: iterator it;
  16.     for (x = 1; x <= N; x++) if(deg[x] == 0) Q[++Q[0]] = x;
  17.     for (i = 1; i <= N; i++) {
  18.         x = Q[i];
  19.         for (it = G[x].begin(); it != G[x].end(); ++it) {
  20.             deg[*it] --;
  21.             if (deg[*it] == 0) Q[++Q[0]] = *it;
  22.         }
  23.     }
  24. }
  25.  
  26. void read () {
  27.     int a, b;
  28.     f >> N >> M;
  29.     for(int i = 1; i <= M; i++) {
  30.         f >> a >> b;
  31.         G[a].emplace_back (b);
  32.         deg[b] ++;
  33.     }
  34. }
  35.  
  36. void print () {
  37.     int i;
  38.     for(i = 1; i <= N; i++) g << Q[i] << " ";
  39. }
  40.  
  41. int main () {
  42.     read();
  43.     solve();
  44.     print();
  45.     return 0;
  46. }
Add Comment
Please, Sign In to add comment