Submission #1246835

#TimeUsernameProblemLanguageResultExecution timeMemory
1246835KindaGoodGamesAmusement Park (CEOI19_amusementpark)C++20
7 / 100
0 ms328 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(0,dfs); } return cnt == n; } 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}; } 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; }else{ // cerr <<"womp womp" << endl; } for(int i = 0; i < m; i++){ if(mask & (1 << i)){ swap(edges[i].first,edges[i].second); bits++; } } } cout << sum << 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...