Submission #1114309

#TimeUsernameProblemLanguageResultExecution timeMemory
1114309n3rm1nAmusement Park (CEOI19_amusementpark)C++17
19 / 100
181 ms13680 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 int 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 (int i = 1; i <= m; ++ i) { if(order[from[i]] > order[to[i]]) curr = curr; else curr = curr + (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; } 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; }
#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...