Submission #1279638

#TimeUsernameProblemLanguageResultExecution timeMemory
1279638not_amirAmusement Park (CEOI19_amusementpark)C++20
100 / 100
1820 ms1496 KiB
#include <bits/stdc++.h> using namespace std; typedef long long ll; constexpr int MOD = 998'244'353; int main() { cin.tie(nullptr)->sync_with_stdio(false); int n, m; cin >> n >> m; vector<vector<bool>> G(n, vector<bool>(n)); for (int i = 0; i < m; i++) { int u, v; cin >> u >> v; G[u - 1][v - 1] = G[v - 1][u - 1] = true; } vector<bool> independent(1 << n); independent[0] = true; for (int i = 1; i < 1 << n; i++) { int v = -1; for (int j = 0; v == -1 && j < n; j++) if (i >> j & 1) v = j; independent[i] = independent[i ^ 1 << v]; for (int j = v + 1; j < n; j++) if (i >> j & 1 && G[v][j]) independent[i] = false; } vector<int> dp(1 << n); dp[0] = 1; for (int i = 1; i < 1 << n; i++) for (int j = i; j; j = j - 1 & i) if (independent[j]) dp[i] = (dp[i] + 1ll * (__builtin_popcount(j) % 2 ? 1 : MOD - 1) * dp[i ^ j]) % MOD; cout << (1ll * dp[(1 << n) - 1] * m % MOD * ((MOD + 1) / 2) % MOD); }
#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...