Submission #691941

#TimeUsernameProblemLanguageResultExecution timeMemory
691941beabossAmusement Park (CEOI19_amusementpark)C++14
0 / 100
1 ms300 KiB
#include <bits/stdc++.h> using namespace std; int MOD = 998244353; int main() { int n, m; cin >> n >> m; 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<pair<int, int> > dp(1<<n, {0, 0}); dp[0]={1, 0}; for (int i = 0; i < n; i++) dp[(1 << i)] = {1, 0}; for (int i = 1; i < (1<<n); i++) { // cout << i << dp[i].first << dp[i].second << endl; for (int ne = 0; ne < n; ne++) { if ((1 << ne) & i) continue; int c = 0; for (auto val: adj[ne]) { if ((1 << val) & i) { c++; } } dp[i^(1 << ne)].second=((dp[i^(1 << ne)].second)%MOD+(dp[i].second+dp[i].first*c)%MOD)%MOD; dp[i^(1 << ne)].first=(dp[i^(1 << ne)].first+dp[i].first)%MOD; // cout << i<<(ne) << dp[i^(1 << ne)].second << endl; } } cout << dp[(1<<n)-1].second << endl; }
#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...