Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <string>
- #include <cstring>
- #include <set>
- #include <list>
- #include <vector>
- #include <algorithm>
- using namespace std;
- enum Colour {
- White, Gray, Black
- };
- class Graph {
- int vertexes;
- list<int>* adj;
- bool DFSUtil(int vertex, int colour[]) {
- colour[vertex] = Gray;
- list<int>::iterator it;
- for (it = adj[vertex].begin(); it != adj[vertex].end(); it++) {
- if (colour[*it] == Gray) {
- return true;
- }
- if (colour[*it] == White && DFSUtil(*it, colour)) {
- return true;
- }
- }
- colour[vertex] = Black;
- return false;
- }
- public:
- Graph(int v) {
- vertexes = v;
- adj = new list<int>[v + 1];
- }
- void addEdge(int from, int to) {
- adj[from].push_back(to);
- }
- bool isCyclic() {
- int* colour = new int[vertexes + 1];
- for (int i = 0; i <= vertexes; i++) {
- colour[i] = White;
- }
- for (int i = 0; i < adj->size(); i++) {
- if (colour[i] == White) {
- if (DFSUtil(i, colour) == true) {
- return true;
- }
- }
- }
- return false;
- }
- };
- int main() {
- int queries;
- cin >> queries;
- for (int i = 0; i < queries; i++) {
- int vertexes, edges;
- cin >> vertexes >> edges;
- Graph* current = new Graph(vertexes);
- for (int j = 0; j < edges; j++) {
- int from, to, weight;
- cin >> from >> to >> weight;
- current->addEdge(from, to);
- }
- if (current->isCyclic()) {
- cout << "true"<<" ";
- }
- else {
- cout << "false" << " ";
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement