結果
| 問題 |
No.2277 Honest or Dishonest ?
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-03-20 20:42:42 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 169 ms / 2,000 ms |
| コード長 | 1,195 bytes |
| コンパイル時間 | 213 ms |
| コンパイル使用メモリ | 82,552 KB |
| 実行使用メモリ | 115,148 KB |
| 最終ジャッジ日時 | 2025-03-20 20:43:00 |
| 合計ジャッジ時間 | 9,203 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 |
| other | AC * 50 |
ソースコード
import sys
sys.setrecursionlimit(1 << 25)
def main():
MOD = 998244353
input = sys.stdin.read().split()
ptr = 0
N = int(input[ptr])
ptr +=1
Q = int(input[ptr])
ptr +=1
parent = list(range(N + 1)) # 1-based
parity = [0] * (N + 1)
component_count = N
contradiction = False
def find(u):
path = []
while parent[u] != u:
path.append(u)
u = parent[u]
root = u
for v in reversed(path):
orig_parent = parent[v]
parent[v] = root
parity[v] ^= parity[orig_parent]
return root
for _ in range(Q):
A = int(input[ptr])
ptr +=1
B = int(input[ptr])
ptr +=1
C = int(input[ptr])
ptr +=1
ra = find(A)
rb = find(B)
pa = parity[A]
pb = parity[B]
if ra != rb:
component_count -= 1
parent[ra] = rb
parity[ra] = pa ^ pb ^ C
else:
if (pa ^ pb) != C:
contradiction = True
if contradiction:
print(0)
else:
print(pow(2, component_count, MOD))
if __name__ == "__main__":
main()
lam6er