結果
問題 | No.2293 無向辺 2-SAT |
ユーザー |
![]() |
提出日時 | 2023-05-05 22:01:14 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
WA
|
実行時間 | - |
コード長 | 3,231 bytes |
コンパイル時間 | 2,308 ms |
コンパイル使用メモリ | 204,776 KB |
最終ジャッジ日時 | 2025-02-12 18:11:21 |
ジャッジサーバーID (参考情報) |
judge2 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 14 WA * 39 |
ソースコード
#include <bits/stdc++.h>using namespace std;constexpr int mod = 998244353;long long modpow(long long a,long long b) {long long ans = 1;while(b) {if(b & 1) {(ans *= a) %= mod;}(a *= a) %= mod;b /= 2;}return ans;}struct UnionFind {vector<int> par;vector<int> size;vector<vector<int>>cld;UnionFind(int n) {par.resize(n);size.resize(n,1);cld.resize(n);for(int i = 0; i < n; i++) {par[i] = i;cld[i].push_back(i);}}int find(int x) {if(par[x] == x) {return x;}return par[x] = find(par[x]);}bool same(int x, int y) {return find(x) == find(y);}int consize(int x) {return size[find(x)];}bool unite(int x,int y) {x = find(x);y = find(y);if(x == y) {return false;}if(size[x] > size[y]) {swap(x,y);}par[x] = y;size[y] += size[x];return true;}};int main() {ios::sync_with_stdio(false);cin.tie(nullptr);int N,Q;cin >> N >> Q;UnionFind uf(N);vector<int>r(N,-1);int cnt = N;bool ok = true;vector<int>tmp;for(int i = 0; i < Q; i++) {int f;cin >> f;if(f == 1) {int u,v;cin >> u >> v;u--;v--;tmp.push_back(u);tmp.push_back(v);if(!uf.same(u,v)) {cnt--;if(uf.size[u] < uf.size[v]) {swap(u,v);}if(r[u] == -1) {r[u] = 0;}for(int j:uf.cld[v]) {r[j] = r[u];}uf.unite(u,v);}else if(r[u] != r[v]) {ok = false;}if(ok) {cout << modpow(2,cnt) << "\n";}else {cout << 0 << "\n";}}if(f == 2) {int u,v;cin >> u >> v;u--;v--;tmp.push_back(u);tmp.push_back(v);if(!uf.same(u,v)) {cnt--;if(uf.size[u] < uf.size[v]) {swap(u,v);}if(r[u] == -1) {r[u] = 0;}for(int j:uf.cld[v]) {r[j] = !r[u];}uf.unite(u,v);}else if(r[u] == r[v]) {ok = false;}if(ok) {cout << modpow(2,cnt) << "\n";}else {cout << 0 << "\n";}}if(f == 3) {cnt = N;ok = true;for(int j:tmp) {uf.par[j] = j;uf.size[j] = 1;uf.cld[j].clear();r[j] = -1;}tmp.clear();cout << modpow(2,N) << "\n";}}}