Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <fstream>
- //#include <iostream>
- #include <vector>
- #include <set>
- #include <queue>
- #include <string>
- using namespace std;
- vector<bool> isTermin1;
- vector<vector<int>> aut1; // [i][c] перейти из состояния i в с
- vector<vector<int>> memoize;
- int ans(int curSost, int rest) {
- int* cur = &memoize[curSost][rest];
- if (*cur != -1) {
- return *cur;
- }
- if (rest == 0) {
- *cur = (isTermin1[curSost]) ? 1 : 0;
- return *cur;
- }
- *cur = 0;
- for (int next : aut1[curSost]) {
- *cur += ans(next, rest - 1);
- *cur %= 1000000007;
- }
- return *cur;
- }
- int main() {
- int n1, m1, k1, len;
- ifstream cin("problem4.in");
- ofstream cout("problem4.out");
- cin >> n1 >> m1 >> k1 >> len;
- memoize.assign(n1 + 1, vector<int>(len + 1, -1));
- isTermin1.resize(n1 + 1);
- aut1.resize(n1 + 1);
- for (int i = 0; i < k1; ++i) {
- int q;
- cin >> q;
- isTermin1[q] = true;
- }
- for (int i = 0; i < m1; ++i) {
- int a, b;
- char c;
- cin >> a >> b >> c;
- aut1[a].push_back(b);
- }
- cout << ans(1, len);
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement