Guest User

xxx

a guest
Nov 26th, 2019
265
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.27 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. vector<int> grafo[100200];
  7. int estados[100200];
  8. int ciclo;
  9.  
  10. void dfs(int v){
  11.      
  12.     estados[v] = 1;  // ja visitei o v
  13.  
  14.     for(int i = 0; i < grafo[v].size(); i++){
  15.         int filho;
  16.         filho = grafo[v][i];
  17.  
  18.         if(estados[filho] == 0){  // ou seja , nao foi visitado
  19.  
  20.             dfs(filho);
  21.  
  22.         }else{
  23.             if(estados[filho] == 1){  // se possui o msm filho e já foi vicitado possui um ciclo eu acho
  24.                
  25.                 ciclo++;
  26.    
  27.             }
  28.         }    
  29.  
  30.     }
  31.  
  32.     estados[v] = 2;
  33.  
  34. }
  35.  
  36. int main(){
  37.  
  38.     int t;
  39.  
  40.     cin >> t;
  41.  
  42.     while(t--){
  43.  
  44.         int n, m; // n = num doc, m = qtd depencencias
  45.         ciclo = 0;
  46.  
  47.         cin >> n >> m;
  48.        
  49.         for(int i = 0; i <= n; i++){ // zerar grafo e vis
  50.             grafo[i].clear();
  51.             estados[i] = 0;
  52.         }
  53.        
  54.         for(int i = 0; i < m; i++){
  55.             int a, b;
  56.  
  57.             cin >> a >> b;
  58.             grafo[a].push_back(b);
  59.         }
  60.  
  61.         for(int i = 1; i <= n; i++){
  62.    
  63.            if(estados[i] == 0)
  64.               dfs(i);
  65.  
  66.         }
  67.         //cout << "ciclo seg vez " << ciclo;
  68.         if(ciclo > 0){
  69.             cout << "YES\n";
  70.         }else
  71.             cout << "NO\n";
  72.  
  73.     }
  74.  
  75.     return 0;
  76. }
Advertisement
Add Comment
Please, Sign In to add comment