Advertisement
Guest User

Untitled

a guest
Oct 17th, 2019
127
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.09 KB | None | 0 0
  1. #include <iostream>
  2. #include <vector>
  3. #include <set>
  4. #include <cstdio>
  5. #include <queue>
  6. #include <map>
  7. #include <cmath>
  8. #include <algorithm>
  9. #include <cassert>
  10.  
  11. using namespace std;
  12.  
  13. #define int int64_t
  14. int n,m;
  15. vector<int> t;
  16.  
  17. const int N=32;
  18. const int P=32;
  19. const int Base=1e9+7;
  20.  
  21.  
  22. int dp[P][N][N];
  23.  
  24. int32_t main() {
  25. ios_base::sync_with_stdio(false);
  26. cin.tie(0);
  27. cout.tie(0);
  28.  
  29. freopen("numwords.in", "r", stdin);
  30. freopen("numwords.out", "w", stdout);
  31.  
  32. cin >> n >> m;
  33.  
  34. for(int i=0;i<m;i++){
  35. int u,v;
  36. char c;
  37. cin >> u >> c >> v;
  38. u--;v--;
  39. dp[0][u][v]++;
  40. }
  41.  
  42. // for(int i=0;i<n;i++){
  43. // for(int j=0;j<n;j++){
  44. // cout << dp[0][i][j] << ' ';
  45. // }
  46. // cout << endl;
  47. // }
  48. // cout << endl;
  49.  
  50. int r;
  51. cin >> r;
  52. t.resize(r);
  53. for(int i=0;i<r;i++) {
  54. cin >> t[i];
  55. t[i]--;
  56. }
  57.  
  58.  
  59. int p;
  60. cin >> p;
  61.  
  62.  
  63. for(int cur=1;cur<P;cur++){
  64. for(int i=0;i<n;i++){
  65. for(int j=0;j<n;j++){
  66. for(int e=0;e<n;e++) {
  67. dp[cur][i][j] += dp[cur-1][i][e] * dp[cur-1][e][j];
  68. dp[cur][i][j] %= Base;
  69. }
  70. // cout << dp[cur][i][j] << ' ';
  71. }
  72. // cout << endl;
  73. }
  74. //cout<< endl;
  75. }
  76.  
  77. vector<int> res(n);
  78. res[0]=1;
  79. for(int cur=0;cur<P;cur++){
  80. if(((1 << cur) | p) == p){
  81. vector<int> nextt(n);
  82. for(int i=0;i<n;i++){
  83. for(int j=0;j<n;j++){
  84. nextt[j] += res[i]*dp[cur][i][j];
  85. nextt[j] %=Base;
  86. }
  87. }
  88. res=nextt;
  89. }
  90. }
  91.  
  92. // for(int i=0;i<n;i++){
  93. // for(int j=0;j<n;j++){
  94. // cout << res[i][j] << ' ' ;
  95. // }
  96. // cout << endl;
  97. // }
  98.  
  99. int ans =0;
  100. for(int i=0;i<t.size();i++){
  101. ans += res[t[i]];
  102. }
  103. ans %= Base;
  104. cout << ans << endl;
  105.  
  106. return 0;
  107. }
  108.  
  109. /*
  110. 3 2
  111. 1 0 1
  112. 0 2 1
  113. 1
  114. 1 2
  115. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement