Guest User

Untitled

a guest
May 19th, 2020
145
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.48 KB | None | 0 0
  1. /*
  2.     Author : DemonStar
  3. */
  4.  
  5. // #pragma GCC optimize("Ofast")
  6. // #pragma GCC optimize("unroll-loops")
  7. // #pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx2,tune=native")
  8.  
  9. #include <bits/stdc++.h>
  10. using namespace std;
  11. #include <ext/pb_ds/assoc_container.hpp>
  12. #include <ext/pb_ds/tree_policy.hpp>
  13. using namespace __gnu_pbds;
  14. #define ordered_set tree<pair<int, int>, null_type, less<pair<int, int>>, rb_tree_tag, tree_order_statistics_node_update>
  15. #define fast                      \
  16.     ios_base::sync_with_stdio(0); \
  17.     cin.tie(0);                   \
  18.     cout.tie(0);
  19. #define ll long long
  20. #define pi pair<int, int>
  21. #define pl pair<long long, long long>
  22. #define pld pair<long double, long double>
  23. #define endl '\n'
  24. #define loop(i, n) for (ll i = 0; i < n; i++)
  25. #define rep(i, begin, end) for (__typeof(begin) i = (begin) - ((begin) > (end)); i != (end) - ((begin) > (end)); i += 1 - 2 * ((begin) > (end)))
  26. #define mod ((ll)(1e9 + 7))
  27. #define all(x) x.begin(), x.end()
  28. #define vl vector<ll>
  29. #define vi vector<int>
  30. #define ml map<ll, ll>
  31. #define vpl vector<pair<ll, ll>>
  32.  
  33. template <typename T, typename TT>
  34. ostream &operator<<(ostream &os, const pair<T, TT> &t)
  35. {
  36.     return os << t.first << " " << t.second;
  37. }
  38. template <typename T>
  39. ostream &operator<<(ostream &os, const vector<T> &t)
  40. {
  41.     for (auto &i : t)
  42.         os << i << " ";
  43.     return os;
  44. }
  45. template <typename T>
  46. istream &operator>>(istream &is, vector<T> &v)
  47. {
  48.     for (T &t : v)
  49.         is >> t;
  50.     return is;
  51. }
  52. template <typename T1, typename T2>
  53. istream &operator>>(istream &is, vector<pair<T1, T2>> &v)
  54. {
  55.     for (pair<T1, T2> &t : v)
  56.         is >> t.first >> t.second;
  57.     return is;
  58. }
  59.  
  60. vector<vl> mul(vector<vl> a, vector<vl> b)
  61. {
  62.     ll n = a.size();
  63.     vector<vl> c(n, vl(n, 0));
  64.     loop(i, n)
  65.         loop(j, n)
  66.             loop(k, n)(c[i][j] += a[i][k] * b[k][j]) %= mod;
  67.     return c;
  68. }
  69.  
  70. vector<vl> modpow(vector<vl> m, ll p)
  71. {
  72.     vector<vl> ans = m;
  73.     p--;
  74.     while (p)
  75.     {
  76.         if (p & 1)
  77.             ans = mul(m, ans);
  78.         m = mul(m, m), p /= 2;
  79.     }
  80.     return ans;
  81. }
  82.  
  83. int main()
  84. {
  85.     fast;
  86.     int n, m, k;
  87.     cin >> n >> m >> k;
  88.     vector<vl> v(n, vl(n, 0));
  89.     while (m--)
  90.     {
  91.         int a, b;
  92.         cin >> a >> b;
  93.         v[a - 1][b - 1] = 1;
  94.     }
  95.     cout << modpow(v, k)[0][n - 1] << endl;
  96.  
  97. #ifdef LOCAL
  98.     cerr
  99.         << "Time elapsed: " << 1.0 * clock() / CLOCKS_PER_SEC << " s.\n";
  100. #endif
  101.  
  102.     return 0;
  103. }
Add Comment
Please, Sign In to add comment