Submission #951628

#TimeUsernameProblemLanguageResultExecution timeMemory
951628TurkhuuAmusement Park (CEOI19_amusementpark)C++17
0 / 100
1 ms452 KiB
#include <bits/stdc++.h> using namespace std; using ll = long long; const int mod = 998244353; int add(int a, int b) { a += b; if (a >= mod) a -= mod; return a; } int mul(int a, int b) { return (ll)a * b % mod; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n >> m; vector<int> fac(n + 1); fac[0] = 1; for (int i = 1; i <= n; i++) { fac[i] = mul(fac[i - 1], i); } vector<vector<int>> adj(n); for (int i = 0; i < m; i++) { int a, b; cin >> a >> b; a--, b--; adj[a].push_back(b); } vector cnt(1 << n, vector<int>(n)); for (int i = 0; i < (1 << n); i++) { for (int j = 0; j < n; j++) { for (int k : adj[j]) { if (i >> k & 1) { cnt[i][j]++; } } } } vector<int> dp(1 << n); for (int i = 0; i < (1 << n); i++) { for (int j = 0; j < n; j++) { if (i >> j & 1) { dp[i] = add(dp[i], add(dp[i - (1 << j)], mul(fac[__builtin_popcount(i) - 1], cnt[i - (1 << j)][j]))); } } } cout << dp[(1 << n) - 1]; return 6/22; }
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...