Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #define NMAX 102
- using namespace std;
- int n, m, a[NMAX][NMAX], t[NMAX][NMAX], viz[NMAX], q[NMAX];
- int k, nrctc;
- void df(int x) {
- viz[x] = 1;
- for(int j = 1; j <= n; j++){
- if(a[x][j] == 1 && viz[j] == 0)
- df(j);
- }
- q[++k] = x;
- }
- void dfTranspus(int x) {
- viz[x] = 1;
- for(int j = 1; j <= n; j++){
- if(t[x][j] == 1 && viz[j] == 0)
- dfTranspus(j);
- }
- }
- int main()
- {
- int x, y;
- cin >> n >> m;
- for(int i = 1; i <= m; i++) {
- cin >> x >> y;
- a[x][y] = 1;
- t[y][x] = 1;
- }
- for(int i = 1; i <= n; i++){
- if(viz[i] == 0) df(i);
- }
- for(int i = 1; i <= n; i++) viz[i] = 0;
- for(int i = n; i >= 1; i--){
- if(viz[q[i]] == 0){
- dfTranspus(q[i]);
- nrctc++;
- }
- }
- cout << nrctc << '\n';
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement