Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- using namespace std;
- const int N = 100;
- vector<int> succesori[N+1], predecesori[N+1];
- vector<int>ctc[N+1];
- vector<int>s;
- bitset<N+1>viz;
- int n, nc, sol;
- void dfs(int x)
- {
- viz[x]=1;
- for(auto y: succesori[x])
- if (!viz[y])
- dfs(y);
- s.push_back(x);
- }
- void dfs_t(int x)
- {
- ctc[nc].push_back(x);
- viz[x] = 1;
- for(auto y: predecesori[x])
- if(!viz[y])
- dfs_t(y);
- }
- int main()
- {
- int m;
- cin>>n>>m;
- for(int i=0; i<m; i++)
- {
- int x, y;
- cin>>x>>y;
- succesori[x].push_back(y);
- predecesori[y].push_back(x);
- }
- for(int i=1; i<=n; i++)
- if(!viz[i])
- dfs(i);
- viz.reset();
- for(int i=(int)s.size()-1; i>=0; i--)
- if(!viz[s[i]])
- {
- nc++;
- dfs_t(s[i]);
- }
- for(int i=1; i<= nc; i++)
- if(ctc[i].size()==1)
- sol++;
- cout<<sol;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement