結果
問題 | No.2991 Hypercubic Graph Flow |
ユーザー |
👑 |
提出日時 | 2024-12-16 20:17:31 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 481 ms / 2,000 ms |
コード長 | 1,811 bytes |
コンパイル時間 | 522 ms |
コンパイル使用メモリ | 82,368 KB |
実行使用メモリ | 91,904 KB |
最終ジャッジ日時 | 2024-12-16 20:17:34 |
合計ジャッジ時間 | 2,836 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 10 |
ソースコード
import syssys.setrecursionlimit(10**6)def EulerPath(m, edges, s=0):used = [False] * mpath = []def dfs(pos):for npos, i in edges[pos]:if used[i]:continueused[i] = Truedfs(npos)path.append(i)dfs(s)return path[::-1]def solve(n):if n == 1:print("No")returnprint("Yes")n2 = n - (n % 2)edges = [[] for _ in range(1 << n2)]E = []m = 0for i in range(1 << n2):for j in range(n2):if i >> j & 1:continueedges[i].append((i ^ (1 << j), m))edges[i ^ (1 << j)].append((i, m))m += 1E.append(1 << j)path = EulerPath(m, edges)A = [[0] * (1 << n) for _ in range(1 << n)]add = 0if n % 2 == 1:add = 1 << (n - 1)s = 0for p in path:t = s ^ E[p]A[s][t] = 1A[t][s] = -1if add != 0:A[s + add][t + add] = -1A[t + add][s + add] = 1s = tif n % 2 == 1:for i in range(0, 1 << (n - 1), 2):u1 = iu2 = i + 1u3 = i + add + 1u4 = i + addx = A[u1][u2]A[u1][u2] += xA[u2][u3] += xA[u3][u4] += xA[u4][u1] += xA[u2][u1] -= xA[u3][u2] -= xA[u4][u3] -= xA[u1][u4] -= xfor row in A:print(*row)for i in range(1 << n):for j in range(1 << n):if bin(i ^ j).count("1") == 1:assert A[i][j] != 0else:assert A[i][j] == 0assert A[i][j] == -A[j][i]assert sum(A[i]) == 0solve(int(input()))