1 solutions
-
0
先不考虑x出现的数量为偶数这个条件,用动态规划
状态表示: 表示从到经过条边的所有方案的数量
状态划分:, 是所有j能到的点
初始化:
答案:
考虑x为偶数这个条件,多了一个限制,状态就要多一维
状态表示:表示从到经过条边,并且经过的次数模的余数为的所有方案的数量
状态划分:
-
当不为时,, 是所有j能到的点
-
当为时,
初始化:
答案:
#include <bits/stdc++.h> using namespace std; typedef long long LL; const int N = 2010, M = N * 2; LL mod = 998244353; int h[N], e[M], ne[M], idx; vector<int> g[N]; LL f[N][N][2]; void add(int a, int b) { g[a].push_back(b); } int main() { int n, m, k, S, T, X; cin >> n >> m >> k >> S >> T >> X; while (m--) { int u, v; cin >> u >> v; add(u, v); add(v, u); } f[0][S][S == X] = 1; for (int i = 0; i <= k; i++) for (int j = 1; j <= n; j++) for (int x = 0; x < 2; x++) { for (int k : g[j]) { if (j != X) f[i + 1][j][x] = ((LL)f[i + 1][j][x] + f[i][k][x]) % mod; else f[i + 1][j][x] = ((LL)f[i + 1][j][x] + f[i][k][(x + 1) % 2]) % mod; } } cout << f[k][T][0]; return 0; }
-
Information
- ID
- 673
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 10
- Tags
- (None)
- # Submissions
- 42
- Accepted
- 1
- Uploaded By