Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <vector>
- using namespace std;
- bool visited[6001];
- int degrees[6001];
- vector<int> graph[6001];
- int vkupnoPoseteni;
- int result;
- void dfs(int v)
- {
- ++vkupnoPoseteni;
- visited[v] = true;
- for(int i = 0 ; i < graph[v].size() ; ++i)
- if(!visited[graph[v][i]])
- dfs(graph[v][i]);
- }
- int main()
- {
- int n,m,a,b;
- scanf("%d%d",&n,&m);
- for(int i=0;i<m;++i)
- {
- scanf("%d%d",&a,&b);
- degrees[b]++;
- graph[a].push_back(b);
- }
- // Pustame dfs od site so 0 in degree
- for(int i = 1 ; i <= n ; ++i)
- {
- if(!visited[i] && degrees[i] == 0)
- {
- ++result;
- dfs(i);
- }
- }
- // Dokolku ova ne se ispolni, poseteni se site, nema ciklusi
- // Vo sprotivno, ke pustame od site neposeteni novi DFS
- if(vkupnoPoseteni != n)
- {
- for(int i = 1 ; i <= n ; ++i)
- {
- if(!visited[i])
- {
- ++result;
- dfs(i);
- }
- }
- }
- printf("%d",result);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement