Submission #1111018

#TimeUsernameProblemLanguageResultExecution timeMemory
1111018crafticatAmusement Park (CEOI19_amusementpark)C++17
7 / 100
1 ms504 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); set<pi> exists; F0R(i, m) { int x, y; cin >> x >> y; x--; y--; edges[i] = {x,y}; exists.insert({x,y}); exists.insert({y,x}); } ll ans = 0; vi perm(n); // Height of I F0R(i, n) perm[i] = i; do { int cost = 0; for (auto [a,b] : edges) { if (perm[a] > perm[b]) cost++; } bool pos = true; vi inv(n); F0R(i, n) { inv[perm[i]] = i; } F0R(i, n - 1) { int a = inv[i]; int b = inv[i + 1]; if (a > b && !exists.count({a,b})) pos = false; } if (pos) ans += cost; ans %= MOD; } while (std::next_permutation(perm.begin(), perm.end())); 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...