結果

問題 No.1078 I love Matrix Construction
ユーザー Salmonize
提出日時 2020-06-12 22:46:08
言語 Python3
(3.13.1 + numpy 2.2.1 + scipy 1.14.1)
結果
TLE  
(最新)
AC  
(最初)
実行時間 -
コード長 2,230 bytes
コンパイル時間 259 ms
コンパイル使用メモリ 12,928 KB
実行使用メモリ 159,904 KB
最終ジャッジ日時 2024-06-24 05:30:56
合計ジャッジ時間 17,812 ms
ジャッジサーバーID
(参考情報)
judge2 / judge5
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 21 TLE * 1
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

import sys
sys.setrecursionlimit(6666666)
readline = sys.stdin.readline
readall = sys.stdin.read
ns = lambda: readline().rstrip()
ni = lambda: int(readline().rstrip())
nm = lambda: map(int, readline().split())
nl = lambda: list(map(int, readline().split()))
prn = lambda x: print(*x, sep='\n')
def StronglyConnectedComponents(N, G, RG):
group_cnt = 0
used = [0] * N
group = [0] * N
order = list()
def dfs(s):
used[s] = 1
for t in G[s]:
if not used[t]:
dfs(t)
order.append(s)
def rdfs(s, col):
group[s] = col
used[s] = 1
for t in RG[s]:
if not used[t]:
rdfs(t, col)
for v in range(N):
if not used[v]:
dfs(v)
used = [0] * N
for v in reversed(order):
if not used[v]:
rdfs(v, group_cnt)
group_cnt += 1
return group_cnt, group
class TwoSatisfilability:
def __init__(self, N):
self.N = N
self.G = [list() for _ in range(N*2)]
self.RG = [list() for _ in range(N*2)]
self.res = [0] * N
def solve(self):
_, group = StronglyConnectedComponents(self.N * 2, self.G, self.RG)
for i in range(self.N):
if group[i] == group[i+self.N]:
return False, list()
self.res[i] = int(group[i] > group[i+self.N])
return True, self.res
def _add_edge(self, a, b):
self.G[a].append(b)
self.RG[b].append(a)
return
def add(self, a, apos, b, bpos):
'''
a V b
'''
self._add_edge(a + self.N * apos, b + self.N * (bpos ^ 1))
self._add_edge(b + self.N * bpos, a + self.N * (apos ^ 1))
return
def solve():
n = ni()
s = [x-1 for x in nl()]
t = [x-1 for x in nl()]
u = nl()
sat = TwoSatisfilability(n**2)
for i in range(n):
cs, ct, cu = s[i], t[i], u[i]
for j in range(n):
x = cs * n + j
y = j * n + ct
sat.add(x, (cu & 1) ^ 1, y, (cu >> 1) ^ 1)
bo, ret = sat.solve()
if not bo:
print(-1)
else:
for i in range(n):
print(*ret[i*n:(i+1)*n])
return
solve()
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0