제출 #1346200

#제출 시각아이디문제언어결과실행 시간메모리
1346200i_love_springAmusement Park (CEOI19_amusementpark)C++20
100 / 100
1198 ms3516 KiB
#include <bits/stdc++.h>

using namespace std;

#define ar array
#define ll long long 
const int inf = 1e9;

const int mod = 998244353;

void solve() {
    int n, m;
    cin >> n >> m;
    vector<int> g(n, 0);
    for (int i = 0; i < m;i++) {
        int u, v;
        cin >> u >> v;
        --u, --v;
        g[u] |= (1 << v);
        g[v] |= (1 << u);
    }

    vector<int> indep(1 << n, 0);
    indep[0] = 1;
    for (int mask = 0; mask < (1 << n); mask++) {
        if (!indep[mask])
            continue;
        for (int i = 0; i < n;i++) {
            if (mask >> i & 1) 
                continue; 
            if ((g[i] & mask))
                continue;
            indep[mask | (1 << i)] = 1;
        }
    }

    vector<ll> dp(1 << n, 0); // number of dags
    dp[0] = 1;
    for (int mask = 0; mask < (1 << n); mask++) {
        for (int sub = mask; sub; sub = (sub - 1) & mask) {
            if (indep[sub]) { // we are trying to make sourse, nodes in sub. so the sourses  should be independent from each other
                if (__builtin_popcount(sub) & 1) { // PIE
                    dp[mask] = (dp[mask] + dp[mask ^ sub]) % mod;
                }else {
                    dp[mask] = (dp[mask] + mod - dp[mask ^ sub]) % mod;
                }
            }
        }
    }

    ll inv2 = (mod + 1) / 2;
    ll ans = dp[(1 << n) - 1] * m % mod * inv2 % mod;
    cout << ans;
}

int32_t main() { 

#ifdef Behruz
    freopen("input.txt", "r", stdin);
    freopen("output.txt", "w", stdout);
#endif 

    ios :: sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    
    solve();

    return 0;
}
#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...