Advertisement
IzhanVarsky

Untitled

May 2nd, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.18 KB | None | 0 0
  1. #include <fstream>
  2. //#include <iostream>
  3. #include <vector>
  4. #include <set>
  5. #include <queue>
  6. #include <string>
  7.  
  8. using namespace std;
  9.  
  10. vector<bool> isTermin1;
  11. vector<vector<int>> aut1; // [i][c] перейти из состояния i в с
  12. vector<vector<int>> memoize;
  13.  
  14. int ans(int curSost, int rest) {
  15. int* cur = &memoize[curSost][rest];
  16. if (*cur != -1) {
  17. return *cur;
  18. }
  19. if (rest == 0) {
  20. *cur = (isTermin1[curSost]) ? 1 : 0;
  21. return *cur;
  22. }
  23. *cur = 0;
  24. for (int next : aut1[curSost]) {
  25. *cur += ans(next, rest - 1);
  26. *cur %= 1000000007;
  27. }
  28. return *cur;
  29. }
  30.  
  31. int main() {
  32. int n1, m1, k1, len;
  33. ifstream cin("problem4.in");
  34. ofstream cout("problem4.out");
  35. cin >> n1 >> m1 >> k1 >> len;
  36. memoize.assign(n1 + 1, vector<int>(len + 1, -1));
  37. isTermin1.resize(n1 + 1);
  38. aut1.resize(n1 + 1);
  39. for (int i = 0; i < k1; ++i) {
  40. int q;
  41. cin >> q;
  42. isTermin1[q] = true;
  43. }
  44. for (int i = 0; i < m1; ++i) {
  45. int a, b;
  46. char c;
  47. cin >> a >> b >> c;
  48. aut1[a].push_back(b);
  49. }
  50. cout << ans(1, len);
  51. return 0;
  52. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement