Submission #1111033

#TimeUsernameProblemLanguageResultExecution timeMemory
1111033crafticatAmusement Park (CEOI19_amusementpark)C++17
42 / 100
3059 ms588 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; V<pi> check; F0R(i, n) { check.emplace_back(perm[i],i); } std::sort(check.begin(), check.end()); F0R(i, n - 1) { int a = check[i].s; for (int j = i + 1; j < n; ++j) { int b = check[j].s; if (exists.count({a,b})) break; if (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...