Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- enum status{
- uncheck = 0,
- checking = 1,
- checked = 2,
- };
- const int N = 1000;
- vector<int> adj[N + 1];
- vector<status> visited;
- int nVertex;
- bool DFS(int u){
- visited[u] = checking;
- for(int v : adj[u]){
- if(visited[v] != uncheck || !DFS(v)){
- return false;
- }
- }
- visited[u] = checked;
- return true;
- }
- int main(){
- scanf("%d", &nVertex);
- for(int u = 1; u <= nVertex; ++u){
- int nEdge;
- scanf("%d", &nEdge);
- for(int j = 1; j <= nEdge; ++j){
- int v;
- scanf("%d", &v);
- adj[u].push_back(v);
- }
- }
- for(int u = 1; u <= nVertex; ++u){
- visited.assign(nVertex + 1, uncheck);
- if(DFS(u)){
- cout << "NO\n";
- } else {
- cout << "YES\n";
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement