結果
問題 | No.1078 I love Matrix Construction |
ユーザー |
![]() |
提出日時 | 2020-06-12 23:09:46 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,935 bytes |
コンパイル時間 | 195 ms |
コンパイル使用メモリ | 82,688 KB |
実行使用メモリ | 235,188 KB |
最終ジャッジ日時 | 2024-06-24 05:52:41 |
合計ジャッジ時間 | 12,644 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 21 WA * 1 |
ソースコード
mod = 1000000007eps = 10**-9def main():import sysfrom collections import dequeinput = sys.stdin.readlinedef fin():print(-1)exit()N = int(input())S = list(map(int, input().split()))T = list(map(int, input().split()))U = list(map(int, input().split()))def idx(i, j, flg):return i * N + j + 1 + flg * N*Nadj = [[] for _ in range(N*N*2 + 1)]adj_rev = [[] for _ in range(N * N * 2 + 1)]for i in range(N):s = S[i] - 1t = T[i] - 1u = U[i]if u == 0:flg_s = 1flg_t = 1elif u == 1:flg_s = 0flg_t = 1elif u == 2:flg_s = 1flg_t = 0else:flg_s = 0flg_t = 0for j in range(N):a = idx(s, j, flg_s)b = idx(j, t, flg_t)if a > N*N:adj[a - N*N].append(b)adj_rev[b].append(a - N*N)else:adj[a + N*N].append(b)adj_rev[b].append(a + N*N)if b > N*N:adj[b - N*N].append(a)adj_rev[a].append(b - N*N)else:adj[b + N*N].append(a)adj_rev[a].append(b + N*N)# SCCseen = [0] * (N*N*2 + 1)order = []for v0 in range(1, N*N*2 + 1):if seen[v0]:continuest = deque()st.append(v0)seen[v0] = 1while st:v = st.pop()if v < 0:order.append(-v)else:st.append(-v)for u in adj[v]:if not seen[u]:seen[u] = 1st.append(u)order.reverse()seen2 = [0] * (N*N*2 + 1)G = []G_idx = [-1] * (N*N*2 + 1)for v0 in order:if seen2[v0]:continuest = deque()st.append(v0)seen2[v0] = 1G.append([v0])G_idx[v0] = len(G) - 1while st:v = st.pop()for u in adj_rev[v]:if seen2[u]:continueG[-1].append(u)G_idx[u] = len(G) - 1seen2[u] = 1st.append(u)for v in range(1, N*N+1):v_ = v + N*Nif G_idx[v] == G_idx[v_]:fin()ans = [[0] * N for _ in range(N)]for i in range(N):for j in range(N):v = idx(i, j, 0)v_ = idx(i, j, 1)if G_idx[v] < G_idx[v_]:ans[i][j] = 1for i in range(N):print(*ans[i])# checkfor i in range(N):s = S[i] - 1t = T[i] - 1u = U[i]for j in range(N):if u == ans[s][j] + ans[j][t] * 2:assert Falseif __name__ == '__main__':main()