Advertisement
MiinaMagdy

Count Paths Queries

Apr 11th, 2023 (edited)
415
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.27 KB | None | 0 0
  1. /*
  2. +---------------------------------------------+
  3. |                                             |
  4. |  Copytright, MinaMagdy, 11/04/2023 (01:24)  |
  5. |                                             |
  6. +---------------------------------------------+
  7. */
  8. #include <bits/stdc++.h>
  9. #include <ext/pb_ds/assoc_container.hpp>
  10. #include <ext/pb_ds/tree_policy.hpp>
  11.  
  12. using namespace std;
  13. using namespace __gnu_pbds;
  14. #define ordered_set tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update>
  15. #define multi_ordered_set tree<int, null_type, less_equal<int>, rb_tree_tag, tree_order_statistics_node_update>
  16. #define endl "\n"
  17. #define MOD 1000000007
  18. #define INF 2000000000
  19. #define all(s) s.begin(), s.end()
  20. #define rall(s) s.rbegin(), s.rend()
  21. #define sz(x) int(x.size())
  22.  
  23. typedef long long ll;
  24. typedef long double ld;
  25. typedef unsigned long long ull;
  26. #include <ext/numeric>
  27. using namespace __gnu_cxx;
  28. typedef vector<vector<int>> matrix;
  29. struct mul {
  30.     int n;
  31.     int mod;
  32.     mul(int n, int mod = 1e9 + 7) : n(n), mod(mod) {}
  33.     matrix operator()(const matrix &a, const matrix &b) {
  34.         matrix c(n, vector<int>(n, 0));
  35.         for (int i = 0; i < n; i++) {
  36.             for (int j = 0; j < n; j++) {
  37.                 for (int k = 0; k < n; k++) {
  38.                     c[i][j] += a[i][k] * 1ll * b[k][j] % mod;
  39.                     if (c[i][j] >= mod)
  40.                         c[i][j] -= mod;
  41.                 }
  42.             }
  43.         }
  44.         return c;
  45.     }
  46. };
  47.  
  48. matrix identity_element(const mul &m) {
  49.     matrix res(m.n, vector<int>(m.n, 0));
  50.     for (int i = 0; i < m.n; i++)
  51.         res[i][i] = 1;
  52.     return res;
  53. }
  54. void solve() {
  55.     int n, m, q;
  56.     cin >> n >> m >> q;
  57.     matrix a(n, vector<int>(n, 0));
  58.     for (int i = 0; i < m; i++) {
  59.         int u, v;
  60.         cin >> u >> v;
  61.         u--, v--;
  62.         a[u][v] = 1;
  63.     }
  64.     map<int, matrix> mp;
  65.     while (q--) {
  66.         int s, e, k;
  67.         cin >> s >> e >> k;
  68.         s--, e--;
  69.         if (!mp.count(k))
  70.             mp[k] = power(a, k, mul(n));
  71.         cout << mp[k][s][e] << endl;
  72.     }
  73. }
  74.  
  75. int main(void)
  76. {
  77.     ios_base::sync_with_stdio(false), cin.tie(NULL), cout.tie(NULL);
  78.     int testcase = 1;
  79.     // cin >> testcase;
  80.     while (testcase--)
  81.         solve();
  82.     return 0;
  83. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement