結果

問題 No.2293 無向辺 2-SAT
ユーザー t98slider
提出日時 2023-05-09 02:20:01
言語 PyPy3
(7.3.15)
結果
MLE  
実行時間 -
コード長 1,154 bytes
コンパイル時間 422 ms
コンパイル使用メモリ 82,692 KB
実行使用メモリ 528,204 KB
最終ジャッジ日時 2024-11-25 16:31:57
合計ジャッジ時間 164,686 ms
ジャッジサーバーID
(参考情報)
judge2 / judge4
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 19 TLE * 24 MLE * 10
権限があれば一括ダウンロードができます

ソースコード

diff #

from sys import stdin
I = stdin.readline

J, R = int, range
X = I().split()
N, Q, P, p, w = J(X[0]), J(X[1]), 998244353, [], []

pow2 = [0] * (N + 1)
pow2[0] = 1
for i in range(N):
    pow2[i + 1] = pow2[i] + pow2[i]
    pow2[i + 1] %= 998244353 

def r(i):
	m = p[i]
	while i != m:
		p[i] = i = p[m]
		m = p[i]
	return i
n = 0
def g(i, j):
	global n
	i, j = r(i), r(j)
	if i != j:
		if w[i] == w[j] : w[j] += 1
		if w[i] < w[j] : p[i] = j
		else: p[j] = i
		n -= 1
U, V, W, T, L, f = [0] * N, [0] * N, [0] * N, [(0,)] * Q, 0, pow(2, N, P)
while Q:
	for l in R(L): V[W[l]] = 0
	M, L, s = 0, 0, 1
	while Q:
		Q, X = Q - 1, I().split()
		t = J(X[0])
		if t == 3:
			T[M], M = ((t,)), M + 1
			break
		else:
			u, v = J(X[1]) - 1, J(X[2]) - 1
			if V[u] == 0: U[u], V[u], W[L], L = L, 1, u, L+1
			if V[v] == 0: U[v], V[v], W[L], L = L, 1, v, L+1
			T[M], M = ((t,u,v)), M + 1
	n = N * 2
	p = [i for i in R(n)]
	w = [0] * n
	for l in T[:M]:
		if l[0] == 3: print(f)
		else:
			if s:
				u, v = U[l[1]], U[l[2]]
				t = u + L
				if l[0] == 1: g(u,v), g(t,v+L)
				else: g(t, v), g(u, v + L)
				if p[r(u)] == p[r(t)] : s=0
			print(pow2[n // 2] if s else 0)
0