結果
問題 |
No.2236 Lights Out On Simple Graph
|
ユーザー |
![]() |
提出日時 | 2025-06-12 14:01:05 |
言語 | PyPy3 (7.3.15) |
結果 |
TLE
|
実行時間 | - |
コード長 | 2,259 bytes |
コンパイル時間 | 266 ms |
コンパイル使用メモリ | 82,364 KB |
実行使用メモリ | 76,432 KB |
最終ジャッジ日時 | 2025-06-12 14:02:07 |
合計ジャッジ時間 | 7,202 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 8 TLE * 1 -- * 48 |
ソースコード
import sys def main(): N, M = map(int, sys.stdin.readline().split()) edges = [] for _ in range(M): a, b = map(int, sys.stdin.readline().split()) a -= 1 b -= 1 edges.append((a, b)) c = list(map(int, sys.stdin.readline().split())) total = sum(c) if total % 2 != 0: print(-1) return mat = [] for i in range(N): row = 0 for j in range(M): a, b = edges[j] if i == a or i == b: row ^= (1 << j) row |= (c[i] << M) mat.append(row) rank = 0 for col in range(M): pivot = -1 for r in range(rank, N): if (mat[r] >> col) & 1: pivot = r break if pivot == -1: continue mat[rank], mat[pivot] = mat[pivot], mat[rank] for r in range(N): if r != rank and (mat[r] >> col) & 1: mat[r] ^= mat[rank] rank += 1 consistent = True for r in range(rank, N): if (mat[r] >> M) & 1: consistent = False break if not consistent: print(-1) return pivot_cols = [] for r in range(rank): for col in range(M): if (mat[r] >> col) & 1: pivot_cols.append(col) break free_vars = sorted(set(range(M)) - set(pivot_cols)) k = len(free_vars) min_weight = float('inf') for mask in range(0, 1 << k): x = [0] * M for i in range(k): var = free_vars[i] x[var] = (mask >> i) & 1 for r in range(rank): row = mat[r] rhs = (row >> M) & 1 pivot_col = -1 for col in range(M): if (row >> col) & 1: pivot_col = col break sum_val = 0 for col in range(pivot_col + 1, M): if (row >> col) & 1: sum_val ^= x[col] x_pivot = (rhs ^ sum_val) x[pivot_col] = x_pivot weight = sum(x) if weight < min_weight: min_weight = weight print(min_weight if min_weight != float('inf') else -1) if __name__ == "__main__": main()