제출 #1246852

#제출 시각아이디문제언어결과실행 시간메모리
1246852KindaGoodGamesAmusement Park (CEOI19_amusementpark)C++20
19 / 100
3096 ms412 KiB
#include<bits/stdc++.h> using namespace std; #define int long long #define pii pair<int,int> int n,m; int mod = 998244353; bool validate(vector<pii>& edges){ vector<vector<int>> adj(n); for(int i = 0; i < m; i++){ int a,b; tie(a,b) = edges[i]; adj[a].push_back(b); } vector<int> num(n,-1), low(n,-1); vector<bool> inS(n); stack<int> S; int counter = 0; int cnt = 0; auto dfs = [&](int v, auto&& dfs) -> void { num[v] = low[v] = counter++; inS[v] = true; S.push(v); for(auto u : adj[v]){ if(num[u] == -1) dfs(u,dfs); if(inS[u]) low[v] = min(low[v], low[u]); } if(num[v] == low[v]){ cnt++; int u; do{ u = S.top(); S.pop(); inS[u] = false; }while(u != v); } }; for(int i = 0; i < n; i++){ if(num[i] == -1) { dfs(i,dfs); } } return cnt == n; } bool validate2(vector<pii>& edges){ vector<vector<int>> adj(n); for(int i = 0; i < m; i++){ int a,b; tie(a,b) = edges[i]; adj[a].push_back(b); } for(int i = 0; i < n; i++){ vector<bool> vis(n); stack<int> S; S.push(i); while(S.size()){ int v = S.top(); S.pop(); if(vis[v] && v == i) { return false; } if(vis[v]) continue; vis[v] = true; for(auto u : adj[v]){ S.push(u); } } } return true; } int32_t main(){ cin >> n >> m; vector<pii> edges(m); for(int i = 0; i < m; i++){ int a,b; cin >> a >> b; a--;b--; edges[i] = {a,b}; } auto start = clock(); int sum = 0; int p2 = 1 << m; for(int mask = 0; mask < p2; mask++){ int bits = 0; for(int i = 0; i < m; i++){ if(mask & (1 << i)){ swap(edges[i].first,edges[i].second); bits++; } } if(validate(edges)){ sum += bits; sum %= mod; } if(validate(edges) != validate2(edges)){ cerr <<""; } for(int i = 0; i < m; i++){ if(mask & (1 << i)){ swap(edges[i].first,edges[i].second); } } } cout << sum << endl; auto end = clock(); cerr << end - start << "ms elapsed" << endl; }
#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...