Advertisement
add1ctus

Светилки

Sep 6th, 2016
114
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.11 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <vector>
  3.  
  4. using namespace std;
  5.  
  6. bool visited[6001];
  7. int degrees[6001];
  8. vector<int> graph[6001];
  9. int vkupnoPoseteni;
  10. int result;
  11.  
  12. void dfs(int v)
  13. {
  14.     ++vkupnoPoseteni;
  15.     visited[v] = true;
  16.     for(int i = 0 ; i < graph[v].size() ; ++i)
  17.         if(!visited[graph[v][i]])
  18.             dfs(graph[v][i]);
  19. }
  20.  
  21. int main()
  22. {
  23.     int n,m,a,b;
  24.     scanf("%d%d",&n,&m);
  25.  
  26.     for(int i=0;i<m;++i)
  27.     {
  28.         scanf("%d%d",&a,&b);
  29.         degrees[b]++;
  30.         graph[a].push_back(b);
  31.     }
  32.  
  33.     // Pustame dfs od site so 0 in degree
  34.     for(int i = 1 ; i <= n ; ++i)
  35.     {
  36.         if(!visited[i] && degrees[i] == 0)
  37.         {
  38.             ++result;
  39.             dfs(i);
  40.         }
  41.     }
  42.  
  43.     // Dokolku ova ne se ispolni, poseteni se site, nema ciklusi
  44.     // Vo sprotivno, ke pustame od site neposeteni novi DFS
  45.     if(vkupnoPoseteni != n)
  46.     {
  47.         for(int i = 1 ; i <= n ; ++i)
  48.         {
  49.             if(!visited[i])
  50.             {
  51.                 ++result;
  52.                 dfs(i);
  53.             }
  54.         }
  55.     }
  56.  
  57.     printf("%d",result);
  58.  
  59.     return 0;
  60. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement