Submission #1246809

#TimeUsernameProblemLanguageResultExecution timeMemory
1246809KindaGoodGamesAmusement Park (CEOI19_amusementpark)C++20
7 / 100
3096 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);
    }

    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 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...