#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);
}
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;
}
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};
}
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;
}
for(int i = 0; i < m; i++){
if(mask & (1 << i)){
swap(edges[i].first,edges[i].second);
bits++;
}
}
}
cout << sum << endl;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |