Advertisement
Guest User

Untitled

a guest
Sep 13th, 2015
439
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.18 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstdio>
  3. #include <algorithm>
  4. #include <cstdlib>
  5. #include <vector>
  6. #include <set>
  7. #include <map>
  8. #include <cassert>
  9. #include <ctime>
  10. #include <cmath>
  11. #include <string>
  12. #include <cstring>
  13. #include <queue>
  14. using namespace std;
  15.  
  16. #define f first
  17. #define s second
  18. #define pb push_back
  19. #define vi vector<int>
  20. #define all(v) (v).begin(), (v).end()
  21. #define sz(v) (int)(v).size()
  22. #define f0(a) memset(a, 0, sizeof(a))
  23. #define ll long long
  24. #define pii pair<int, int>
  25. #define mp make_pair
  26. const int maxn = (int)1e5;
  27. int n, m;
  28. vi g[maxn], gi[maxn];
  29. bool used[maxn][2];
  30. int ans;
  31. void Dfs(int v, int d) {
  32.    
  33.     if (used[v][d]) return;
  34.     used[v][d] = true;
  35.  
  36.     if (d == 0) {
  37.         for (int u : gi[v]) {
  38.             Dfs(u, 0);
  39.         }
  40.     }
  41.  
  42.     for (int u : g[v])
  43.         Dfs(u, 1);
  44. }
  45.  
  46. int main() {
  47.     scanf("%d%d", &n, &m);
  48.     for (int i = 0; i < m; ++i) {
  49.         int u, v;
  50.         scanf("%d%d", &u, &v); --u; --v;
  51.         g[u].pb(v);
  52.         gi[v].pb(u);
  53.     }
  54.  
  55.     for (int i = 0; i < n; ++i) {
  56.  
  57.         for (int j = 0; j < n; ++j)
  58.             used[j][0] = used[j][1] = false;
  59.  
  60.         Dfs(i, 0);
  61.         for (int j = 0; j < n; ++j)
  62.             if (used[j][0] || used[j][1]) {
  63.                 ++ans;
  64.             }
  65.     }
  66.     cout << ans << endl;
  67.     return 0;
  68. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement