Submission #1246720

#TimeUsernameProblemLanguageResultExecution timeMemory
1246720caterpillowAmusement Park (CEOI19_amusementpark)C++20
0 / 100
1 ms324 KiB
#include <bits/stdc++.h>

using namespace std;
using ll = long long;
const ll mod = 998244353;

int main() {
    cin.tie(0)->sync_with_stdio(0);
    
    int n, m;   
    cin >> n >> m;
    vector<int> adj(n);
    for (int i = 0; i < m; i++) {
        int u, v;
        cin >> u >> v;
        u--, v--;
        adj[u] |= (1 << v);
    }
    vector<array<ll, 2>> dp(1 << n, {0, 0}); // {# of ways, sum of ways}
    dp[0] = {1, 0};
    for (int msk = 0; msk < (1 << n); msk++) {
        for (int i = 0; i < n; i++) if (1 & ~msk >> i) {
            (dp[msk | (1 << i)][0] += dp[msk][0]) %= mod;
            (dp[msk | (1 << i)][1] += dp[msk][0] * __builtin_popcount(msk & adj[i]) + dp[msk][1]) %= mod;
        }
    }
    cout << dp[(1 << n) - 1][1] << '\n';
}
#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...