Advertisement
MinhNGUYEN2k4

Untitled

Jul 23rd, 2021
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.89 KB | None | 0 0
  1. //Nguyen Huu Hoang Minh
  2. #include <bits/stdc++.h>
  3. #define sz(x) int(x.size())
  4. #define all(x) x.begin(),x.end()
  5. #define reset(x) memset(x, 0,sizeof(x))
  6. #define pb push_back
  7. #define mp make_pair
  8. #define fi first
  9. #define se second
  10. #define N 805
  11. #define remain(x) if (x > MOD) x -= MOD
  12. #define ii pair<int, int>
  13. #define vi vector<int>
  14. #define vii vector< ii >
  15. #define bit(x, i) (((x) >> (i)) & 1)
  16. #define Task "test"
  17. #define int long long
  18.  
  19. using namespace std;
  20.  
  21. typedef long double ld;
  22. const int inf = 1e10;
  23.  
  24. int n,m;
  25. vector<int> a[N];
  26. int par[N];
  27.  
  28. void readfile()
  29. {
  30.     ios_base::sync_with_stdio(false);
  31.     cin.tie(0);cout.tie(0);
  32.     if (fopen(Task".inp","r"))
  33.     {
  34.         freopen(Task".inp","r",stdin);
  35.         //freopen(Task".out","w",stdout);
  36.     }
  37.     cin >> n >> m;
  38.     for(int i=1; i<=m; i++)
  39.     {
  40.         int u,v;
  41.         cin >> u >> v;
  42.         a[u].pb(v);
  43.     }
  44. }
  45.  
  46. int vst[N];
  47. int inst[N];
  48. stack<int> st;
  49.  
  50. int fin(int u)
  51. {
  52.     return (u==par[u]) ? u : par[u] = fin(par[u]);
  53. }
  54.  
  55. void dfs(int u)
  56. {
  57.     vst[u] = 1;
  58.     inst[u] = 1;
  59.     st.push(u);
  60.     for(auto v : a[u])
  61.     {
  62.         if (inst[v])
  63.         {
  64.             v = fin(v);
  65.             while (st.top()!=v)
  66.             {
  67.                 par[st.top()] = v;
  68.                 st.pop();
  69.             }
  70.         }
  71.     }
  72.     for(int v : a[u]) if (!vst[v]) dfs(v);
  73.     inst[u] = 0;
  74.     if (st.top()==u) st.pop();
  75. }
  76.  
  77. void proc()
  78. {
  79.     for(int i=1; i<=n; i++) par[i] = i;
  80.     for(int i=1; i<=n; i++) if (!vst[i]) dfs(i);
  81.     int ans=0;
  82.     vector<int> f(n+1,0);
  83.     for(int i=1; i<=n; i++) {f[i] = (par[i]==i); cout << f[i] <<' ';}
  84.     for(int i=1; i<=n; i++)
  85.     {
  86.         for(int j : a[i])
  87.         {
  88.             if (fin(j) != fin(i)) f[fin(j)]=0;
  89.         }
  90.     }
  91.     for(int i=1; i<=n; i++) ans += f[i];
  92.     cout << ans;
  93. }
  94.  
  95. signed main()
  96. {
  97.     readfile();
  98.     proc();
  99.     return 0;
  100. }
  101.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement