Submission #1247838

#TimeUsernameProblemLanguageResultExecution timeMemory
1247838firegirlwaterboyAmusement Park (CEOI19_amusementpark)C++20
100 / 100
1983 ms2764 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; const int MAXN = 1e6 + 5; const ll MOD = 998244353; int n, m, g[MAXN]; bool works[MAXN]; ll dp[MAXN]; void solve() { cin >> n >> m; for (int i = 0; i < m; i++) { int x, y; cin >> x >> y; x--, y--; g[x] |= (1 << y), g[y] |= (1 << x); } for (int i = 0; i < (1 << n); i++) { works[i] = 1; for (int j = 1; j <= n; j++) { if (i >> j & 1) works[i] &= ((g[j] & i) == 0); } } dp[0] = 1; for (int i = 1; i < (1 << n); i++) { for (int j = i; j; j = (j - 1) & i) { if (!works[j]) continue; dp[i] += (__builtin_popcount(j) & 1 ? 1 : -1) * dp[i ^ j]; (dp[i] += MOD) %= MOD; } } cout << dp[(1 << n) - 1] * m % MOD * (MOD + 1 >> 1) % MOD << "\n"; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); solve(); return 0; }
#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...