Submission #1114312

#TimeUsernameProblemLanguageResultExecution timeMemory
1114312n3rm1nAmusement Park (CEOI19_amusementpark)C++17
19 / 100
175 ms13816 KiB
#include<bits/stdc++.h> #define endl '\n' using namespace std; const int MAXN = 12, MAXM = 200; void speed() { ios_base::sync_with_stdio(false); cin.tie(NULL); cout.tie(NULL); } int n, m; int from[MAXM], to[MAXM]; void read() { cin >> n >> m; for (int i = 1; i <= m; ++ i) cin >> from[i] >> to[i]; } int order[MAXN], used[MAXN], visited[MAXN], in_cycle[MAXN]; /// na koq poziciq e i long long ans = 0, imp = 0; const int mod = 998244353; unordered_set < long long > mp; vector < int > g[MAXN]; void dfs(int beg) { if(imp)return; visited[beg] = 1; in_cycle[beg] = 1; for (auto nb: g[beg]) { if(imp)return; if(!visited[nb])dfs(nb); else if(in_cycle[nb])imp = 1; } in_cycle[beg] = 0; } void check() { int cnt = 0; long long curr = 0; for (long long i = 1; i <= m; ++ i) { if(order[from[i]] > order[to[i]]) curr = curr; else curr = curr + 1LL * (1 << (i-1)); } if(mp.find(curr) != mp.end())return; mp.insert(curr); for (int i = 1; i <= n; ++ i) { g[i].clear(); visited[i] = 0; in_cycle[i] = 0; } for (int i = 1; i <= m; ++ i) { if(order[from[i]] > order[to[i]])g[from[i]].push_back(to[i]); else { cnt ++; g[to[i]].push_back(from[i]); } } imp = 0; for (int i = 1; i <= n && (!imp); ++ i) { if(visited[order[i]])continue; dfs(visited[order[i]]); } if(imp)return; ans += cnt; ans %= mod; } void gen(int pos) { if(pos > n) { check(); return; } for (int i = 1; i <= n; ++ i) { if(used[i])continue; order[pos] = i; used[i] = 1; gen(pos+1); used[i] = 0; } } int main() { speed(); read(); gen(1); cout << ans << endl; return 0; } /** 10 45 8 2 8 9 5 2 4 9 7 5 4 8 2 6 10 2 10 9 4 5 6 9 2 7 7 3 3 10 1 2 5 1 3 6 10 7 1 8 1 6 1 4 3 4 10 5 4 7 4 10 6 10 9 7 4 2 8 10 8 7 9 5 6 4 10 1 3 2 5 3 6 7 9 1 8 5 1 7 1 3 2 9 6 5 8 3 8 6 9 3 */
#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...