Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- int used[10000];
- queue <int> q;
- vector<int> p[10000];
- int num;
- bool bfs(int v, int colour, int start) {
- q.push(v);
- while (!q.empty()) {
- v = q.front();
- used[v] = colour;
- q.pop();
- for (int i = 0; i < p[v].size(); i++) {
- if (used[p[v][i]] == colour && p[v][i] == start) return false;
- if (used[p[v][i]] == colour) {
- if (!bfs(p[v][i], -1, p[v][i])) return false;
- for (int j = 0; j < num; j++) if (used[j] == -1) used[j] = colour;
- }
- if (used[p[v][i]] == 0 || colour == -1)q.push(p[v][i]);
- }
- }
- return true;
- }
- bool canFinish(int numCourses, vector<pair<int, int>>& pr) {
- num = numCourses;
- if (pr.size() == 0) return true;
- for (int i = 0; i < pr.size(); i++) {
- p[pr[i].second].push_back(pr[i].first);
- }
- bool ans = true;
- int cnt = 1;
- for (int i = 0; i < numCourses; i++) {
- if (used[i] == 0 && p[i].size() != 0) {
- ans = bfs(i, cnt, i);
- cnt++;
- }
- if (!ans) return false;
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement