Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- using namespace std;
- vector<int> grafo[100200];
- int estados[100200];
- int ciclo;
- void dfs(int v){
- estados[v] = 1; // ja visitei o v
- for(int i = 0; i < grafo[v].size(); i++){
- int filho;
- filho = grafo[v][i];
- if(estados[filho] == 0){ // ou seja , nao foi visitado
- dfs(filho);
- }else{
- if(estados[filho] == 1){ // se possui o msm filho e já foi vicitado possui um ciclo eu acho
- ciclo++;
- }
- }
- }
- estados[v] = 2;
- }
- int main(){
- int t;
- cin >> t;
- while(t--){
- int n, m; // n = num doc, m = qtd depencencias
- ciclo = 0;
- cin >> n >> m;
- for(int i = 0; i <= n; i++){ // zerar grafo e vis
- grafo[i].clear();
- estados[i] = 0;
- }
- for(int i = 0; i < m; i++){
- int a, b;
- cin >> a >> b;
- grafo[a].push_back(b);
- }
- for(int i = 1; i <= n; i++){
- if(estados[i] == 0)
- dfs(i);
- }
- //cout << "ciclo seg vez " << ciclo;
- if(ciclo > 0){
- cout << "YES\n";
- }else
- cout << "NO\n";
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment