Submission #1177379

#TimeUsernameProblemLanguageResultExecution timeMemory
1177379nrg_studioAmusement Park (CEOI19_amusementpark)C++20
100 / 100
1278 ms234996 KiB
#include <bits/stdc++.h> using namespace std; #define ll long long #define pb push_back #define pii pair<int,int> #define f first #define s second #define chmin(a, b) a = min(a,b) #define chmax(a, b) a = max(a,b) #define FOR(i, a, b) for (int i = (a); i < (b); i++) #define F0R(i, a) for (int i = 0; i < (a); i++) #define all(x) x.begin(),x.end() #define vec vector const int MAX_N = 18, mod = 998244353, inv = 499122177; map<int,int> dp[1<<18]; int adj[MAX_N]; int main() { ios::sync_with_stdio(false); cin.tie(0); int n, m; cin >> n >> m; for (int i=0;i<m;i++) { int a, b; cin >> a >> b; a--; b--; adj[a] |= (1<<b); adj[b] |= (1<<a); } dp[0][(1<<n)-1] = 1; for (int mask=0;mask<(1<<MAX_N);mask++) { for (auto[cand,x] : dp[mask]) { for (int j=0;j<n;j++) { if (!(cand&(1<<j))) {continue;} int remove_bad = ((1<<n)-1)^((1<<(j+1))-1); int remove_used = ((1<<n)-1)^mask; //if (mask==0 && cand==7 && j==2) {cout << remove_other << '\n';} int cand2 = (cand&remove_bad)|(adj[j]&remove_used); dp[mask|(1<<j)][cand2] = (dp[mask|(1<<j)][cand2] + x)%mod; } } } //cout << dp[(1<<n)-1][0] << '\n'; cout << (ll)m*dp[(1<<n)-1][0] %mod *inv %mod << '\n'; }
#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...