結果
| 問題 |
No.1078 I love Matrix Construction
|
| コンテスト | |
| ユーザー |
QCFium
|
| 提出日時 | 2020-05-02 18:03:59 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,209 ms / 2,000 ms |
| コード長 | 1,398 bytes |
| コンパイル時間 | 604 ms |
| コンパイル使用メモリ | 82,176 KB |
| 実行使用メモリ | 207,380 KB |
| 最終ジャッジ日時 | 2024-12-30 19:18:25 |
| 合計ジャッジ時間 | 16,464 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 22 |
ソースコード
import sys
sys.setrecursionlimit(500 * 500 * 2)
N = int(input())
a = list(map(int, input().split()))
b = list(map(int, input().split()))
c = list(map(int, input().split()))
for i in range(N) :
a[i] -= 1
b[i] -= 1
def INDEX(i, j, k) : return (i * N + j) * 2 + k
hen = [[] for i in range(N * N * 2)]
rev = [[] for i in range(N * N * 2)]
for i in range(N) :
r0 = c[i] % 2
r1 = c[i] // 2
for j in range(N) :
hen[INDEX(a[i], j, r0)].append(INDEX(j, b[i], not r1));
rev[INDEX(j, b[i], not r1)].append(INDEX(a[i], j, r0));
hen[INDEX(j, b[i], r1)].append(INDEX(a[i], j, not r0));
rev[INDEX(a[i], j, not r0)].append(INDEX(j, b[i], r1));
visited = [False for i in range(N * N * 2)]
ord = []
def dfs0(i) :
visited[i] = True
for j in hen[i] :
if not visited[j] : dfs0(j)
ord.append(i)
group = [-1 for i in range(N * N * 2)]
group_cnt = 0
def dfs1(i) :
group[i] = group_cnt
for j in rev[i] :
if group[j] == -1 : dfs1(j)
for i in range(N * N * 2) :
if not visited[i] : dfs0(i)
ord = ord[::-1]
for i in ord :
if group[i] == -1 :
dfs1(i)
group_cnt += 1
possible = True
for i in range(N) :
for j in range(N) :
if group[INDEX(i, j, 0)] == group[INDEX(i, j, 1)] : possible = False
if not possible :
print("-1")
else :
for i in range(N) :
for j in range(N) :
if j : print(' ', end = '')
print(int(group[INDEX(i, j, 0)] < group[INDEX(i, j, 1)]), end = '')
print('')
QCFium