Submission #1110975

#TimeUsernameProblemLanguageResultExecution timeMemory
1110975crafticatAmusement Park (CEOI19_amusementpark)C++17
19 / 100
3062 ms592 KiB
#include <bits/stdc++.h> using namespace std; template<typename T> using V = vector<T>; using vi = V<int>; using vb = V<bool>; using pi = pair<int,int>; #define F0R(i,n) for (int i = 0; i < n;i++) #define FOR(i, j, n) for(int i = j; i < n;i++) #define ckmin(x,y) x = min(x,y) #define f first #define s second using ll = long long; constexpr int MOD = 998244353; V<int> vis; V<V<int>> g; bool dfs(int x) { if (vis[x] == 1) return false; vis[x] = 1; for (auto y : g[x]) { if (vis[y] == 2) continue; if (!dfs(y)) return false; } vis[x] = 2; return true; } int main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); int n, m; cin >> n >> m; V<pi> edges(m); F0R(i, m) { int x, y; cin >> x >> y; edges[i] = {x,y}; } ll ans = 0; for (int i = 1; i < (1 << m); ++i) { bitset<32> mask = i; int cost = 0; g.clear(); vis.clear(); vis.resize(n + 1); g.resize(n + 1); F0R(j, m) { auto [a, b] = edges[j]; if (mask[j]) { cost++; swap(a,b); } g[a].push_back(b); } bool pos = true; FOR(k, 1, n + 1) { if (vis[k] == 2) continue; if (!dfs(k)) pos = false; } if (pos) ans += cost; ans %= MOD; } cout << ans; 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...