이 제출은 이전 버전의 oj.uz에서 채점하였습니다. 현재는 제출 당시와는 다른 서버에서 채점을 하기 때문에, 다시 제출하면 결과가 달라질 수도 있습니다.
#include <bits/stdc++.h>
#define ff first
#define ss second
using namespace std;
const int mod = 998244353;
const int inv2 = (mod+1) >> 1;
const int maxn = 18;
int dp[1<<maxn];
bitset<1<<maxn> ind;
pair<int, int> edge[maxn*maxn];
int n, m;
bool check(const int &s) {
for (int i = 1; i <= m; i++)
if (((s>>edge[i].ff) & 1) && ((s>>edge[i].ss) & 1))
return false;
return true;
}
void solve() {
cin >> n >> m;
for (int i = 1; i <= m; i++)
cin >> edge[i].ff >> edge[i].ss, edge[i].ff--, edge[i].ss--;
for (int i = 1; i < (1<<n); i++) ind[i] = check(i);
dp[0] = 1;
for (int i = 1; i < (1<<n); i++)
for (int j = i; j; j = (j-1) & i)
if (ind[j]) dp[i] = (dp[i] + ((__builtin_popcount(j) & 1) ? dp[i^j] : -dp[i^j])) % mod;
cout << 1ll*((dp[(1<<n)-1] + mod) % mod) * m % mod * inv2 % mod;
}
signed main() {
ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
solve();
return 0;
}
| # | 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... |