Guest User

Untitled

a guest
Apr 18th, 2022
201
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.79 KB | None | 0 0
  1. /**
  2.  *    Author: Nachiket Kanore
  3.  *    Created: Monday 18 April 2022 10:14:21 PM IST
  4.  **/
  5. #include <bits/stdc++.h>
  6.  
  7. #define int int64_t
  8. #define sz(x) (int)(x.size())
  9. #define ALL(x) (x).begin(), (x).end()
  10. #define F0R(i, R) for (int i = (0); i < (R); ++i)
  11. #define FOR(i, L, R) for (int i = (L); i <= (R); ++i)
  12.  
  13. using namespace std;
  14. const int MOD = 1e9 + 7;
  15. const int SZ  = 105;
  16.  
  17. int add(int a, int b) {
  18.     int res = a + b;
  19.     if (res >= MOD)
  20.         return res % MOD;
  21.     return res;
  22. }
  23.  
  24. int mult(int a, int b) {
  25.     long long res = a;
  26.     res *= b;
  27.     if (res >= MOD)
  28.         return res % MOD;
  29.     return res;
  30. }
  31.  
  32. struct matrix {
  33.     int arr[SZ][SZ];
  34.  
  35.     void reset() {
  36.         memset(arr, 0, sizeof(arr));
  37.     }
  38.  
  39.     void makeiden() {
  40.         reset();
  41.         for (int i = 0; i < SZ; i++) {
  42.             arr[i][i] = 1;
  43.         }
  44.     }
  45.  
  46.     matrix operator+(const matrix& o) const {
  47.         matrix res;
  48.         for (int i = 0; i < SZ; i++) {
  49.             for (int j = 0; j < SZ; j++) {
  50.                 res.arr[i][j] = add(arr[i][j], o.arr[i][j]);
  51.             }
  52.         }
  53.         return res;
  54.     }
  55.  
  56.     matrix operator*(const matrix& o) const {
  57.         matrix res;
  58.         for (int i = 0; i < SZ; i++) {
  59.             for (int j = 0; j < SZ; j++) {
  60.                 res.arr[i][j] = 0;
  61.                 for (int k = 0; k < SZ; k++) {
  62.                     res.arr[i][j] = add(res.arr[i][j], mult(arr[i][k], o.arr[k][j]));
  63.                 }
  64.             }
  65.         }
  66.         return res;
  67.     }
  68. };
  69.  
  70. matrix power(matrix a, int b) {
  71.     matrix res;
  72.     res.makeiden();
  73.     while (b) {
  74.         if (b & 1) {
  75.             res = res * a;
  76.         }
  77.         a = a * a;
  78.         b >>= 1;
  79.     }
  80.     return res;
  81. }
  82. int N, M, K, H;
  83.  
  84. int32_t main() {
  85.     ios::sync_with_stdio(0);
  86.     cin.tie(0);
  87.     cin >> N >> M >> K >> H;
  88.     if (K == 0) {
  89.         cout << "0\n";
  90.         return 0;
  91.     }
  92.     matrix A;
  93.     A.reset();
  94.     F0R(i, M) {
  95.         int u, v;
  96.         cin >> u >> v;
  97.         A.arr[u][v] = 1;
  98.         A.arr[v][u] = 1;
  99.     }
  100.     A       = power(A, K);
  101.     int ans = A.arr[H][H] % MOD;
  102.     cout << ans;
  103.     return 0;
  104. }
  105.  
Advertisement
Add Comment
Please, Sign In to add comment