fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #define MAX 1000
  5.  
  6. typedef struct Node {
  7. int v;
  8. struct Node* next;
  9. } Node;
  10.  
  11. Node* adj[MAX];
  12. int visited[MAX], recStack[MAX];
  13. int n;
  14.  
  15. void addEdge(int u, int v) {
  16. Node* temp = (Node*)malloc(sizeof(Node));
  17. temp->v = v;
  18. temp->next = adj[u];
  19. adj[u] = temp;
  20. }
  21.  
  22. int dfs(int v) {
  23. visited[v] = 1;
  24. recStack[v] = 1;
  25.  
  26. for (Node* temp = adj[v]; temp != NULL; temp = temp->next) {
  27. int u = temp->v;
  28.  
  29. if (!visited[u] && dfs(u))
  30. return 1;
  31. else if (recStack[u])
  32. return 1;
  33. }
  34.  
  35. recStack[v] = 0;
  36. return 0;
  37. }
  38.  
  39. int main() {
  40. int m, u, v;
  41. scanf("%d %d", &n, &m);
  42.  
  43. for (int i = 0; i < n; i++) adj[i] = NULL;
  44.  
  45. for (int i = 0; i < m; i++) {
  46. scanf("%d %d", &u, &v);
  47. if (u >= 0 && u < n && v >= 0 && v < n)
  48. addEdge(u, v);
  49. }
  50.  
  51. for (int i = 0; i < n; i++) {
  52. if (!visited[i] && dfs(i)) {
  53. printf("YES\n");
  54. return 0;
  55. }
  56. }
  57.  
  58. printf("NO\n");
  59. return 0;
  60. }
Success #stdin #stdout 0s 5328KB
stdin
4 4
0 1
1 2
2 3
3 1
stdout
YES