Skip to content

Commit d2b83a4

Browse files
committed
chromatic number test
1 parent cb8157c commit d2b83a4

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed
Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,65 @@
1+
// @brief Chromatic Number
2+
#define PROBLEM "https://judge.yosupo.jp/problem/chromatic_number"
3+
#pragma GCC optimize("O3,unroll-loops")
4+
#include <bits/allocator.h>
5+
#pragma GCC target("avx2")
6+
#include <iostream>
7+
#include "blazingio/blazingio.min.hpp"
8+
#define CP_ALGO_CHECKPOINT
9+
#include "cp-algo/number_theory/modint.hpp"
10+
#include "cp-algo/math/subset_convolution.hpp"
11+
#include "cp-algo/math/poly.hpp"
12+
#include <bits/stdc++.h>
13+
14+
using namespace std;
15+
16+
const int mod = 998244353;
17+
using base = cp_algo::math::modint<mod>;
18+
using polyn = cp_algo::math::poly_t<base>;
19+
20+
cp_algo::big_vector<base> indep_subsets(auto const& adj) {
21+
uint32_t n = (uint32_t)size(adj);
22+
uint32_t masks = 1 << n;
23+
cp_algo::big_vector<base> indep(masks);
24+
indep[0] = base(1);
25+
for(uint32_t v = 0; v < n; v++) {
26+
uint32_t delta = 1 << v;
27+
if (adj[v] & delta) continue;
28+
for(uint32_t mask = 0; mask < delta; mask++) {
29+
indep[mask + delta] = (adj[v] & mask) ? base(0) : indep[mask];
30+
}
31+
}
32+
return indep;
33+
}
34+
35+
void solve() {
36+
size_t n, m;
37+
cin >> n >> m;
38+
vector<uint64_t> adj(n);
39+
for(size_t i = 0; i < m; i++) {
40+
int u, v;
41+
cin >> u >> v;
42+
adj[u] |= 1 << v;
43+
adj[v] |= 1 << u;
44+
}
45+
auto indep = indep_subsets(adj);
46+
cp_algo::big_vector<base> w(1 << n);
47+
w.back() = 1; // w[S] = 1 if S is the full set, else 0
48+
auto Y = cp_algo::math::subset_power_projection<base>(indep, w, n+1);
49+
size_t ans = 0;
50+
while(Y[ans] == base(0)) {
51+
ans++;
52+
}
53+
cout << ans << "\n";
54+
}
55+
56+
signed main() {
57+
//freopen("input.txt", "r", stdin);
58+
ios::sync_with_stdio(0);
59+
cin.tie(0);
60+
int t;
61+
t = 1;// cin >> t;
62+
while(t--) {
63+
solve();
64+
}
65+
}

0 commit comments

Comments
 (0)