Advertisement
Guest User

Untitled

a guest
Dec 18th, 2018
62
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.26 KB | None | 0 0
  1.     int used[10000];
  2.     queue <int> q;
  3.     vector<int> p[10000];
  4.     int num;
  5.     bool bfs(int v, int colour, int start) {
  6.         q.push(v);
  7.         while (!q.empty()) {
  8.             v = q.front();
  9.             used[v] = colour;
  10.             q.pop();
  11.             for (int i = 0; i < p[v].size(); i++) {
  12.                 if (used[p[v][i]] == colour && p[v][i] == start) return false;
  13.                 if (used[p[v][i]] == colour) {
  14.                     if (!bfs(p[v][i], -1, p[v][i])) return false;
  15.                     for (int j = 0; j < num; j++) if (used[j] == -1) used[j] = colour;
  16.                 }
  17.                 if (used[p[v][i]] == 0 || colour == -1)q.push(p[v][i]);
  18.  
  19.             }
  20.         }
  21.         return true;
  22.     }
  23.     bool canFinish(int numCourses, vector<pair<int, int>>& pr) {
  24.         num = numCourses;
  25.         if (pr.size() == 0) return true;
  26.         for (int i = 0; i < pr.size(); i++) {
  27.             p[pr[i].second].push_back(pr[i].first);
  28.         }
  29.         bool ans = true;
  30.         int cnt = 1;
  31.         for (int i = 0; i < numCourses; i++) {
  32.             if (used[i] == 0 && p[i].size() != 0) {
  33.                 ans = bfs(i, cnt, i);
  34.                 cnt++;
  35.             }
  36.             if (!ans) return false;
  37.         }
  38.         return true;
  39.     }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement