Advertisement
K_Y_M_bl_C

Untitled

Dec 29th, 2017
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 0.86 KB | None | 0 0
  1. int main()
  2. {
  3.     ios_base::sync_with_stdio(0), cin.tie(0), cout.tie(0);
  4.     int n, m;
  5.     cin >> n >> m;
  6.     vector<pii> e(m);
  7.     vector<vi> g(n), gt(n);
  8.     vi dp(n), rdp(n);
  9.     for (int i = 0; i < m; ++i)
  10.     {
  11.         int x, y;
  12.         cin >> x >> y;
  13.         --x, --y;
  14.         g[x].inb(y);
  15.         gt[y].inb(x);
  16.         e[i] = mk(x, y);
  17.     }
  18.     vi was(n);
  19.     function<void(int)> dfs = [&](int u)
  20.     {
  21.         was[u] = 1;
  22.         dp[u] = 1;
  23.         for (int to : g[u])
  24.         {
  25.             if (!was[to])
  26.                 dfs(to);
  27.             dp[u] += dp[to];
  28.         }
  29.     };
  30.     for (int i = 0; i < n; ++i)
  31.     {
  32.         if (!was[i])
  33.             dfs(i);
  34.     }
  35.     was.assign(n, 0);
  36.     function<void(int)> dfs2 = [&](int u)
  37.     {
  38.         was[u] = 1;
  39.         rdp[u] = 1;
  40.         for (int to : gt[u])
  41.         {
  42.             if (!was[to])
  43.                 dfs2(to);
  44.             rdp[u] += rdp[to];
  45.         }
  46.     };
  47.     for (int i = 0; i < n; ++i)
  48.     {
  49.         if (!was[i])
  50.             dfs2(i);
  51.     }
  52.     int q;
  53.     cin >> q;
  54.     while (q--)
  55.     {
  56.         int i;
  57.         cin >> i;
  58.         --i;
  59.         cout << 1ll * rdp[e[i].X] * dp[e[i].Y] << "\n";
  60.     }
  61.     return 0;
  62. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement