結果
| 問題 |
No.1078 I love Matrix Construction
|
| コンテスト | |
| ユーザー |
Salmonize
|
| 提出日時 | 2020-06-12 22:53:39 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
TLE
(最新)
AC
(最初)
|
| 実行時間 | - |
| コード長 | 2,227 bytes |
| コンパイル時間 | 372 ms |
| コンパイル使用メモリ | 12,928 KB |
| 実行使用メモリ | 159,652 KB |
| 最終ジャッジ日時 | 2024-06-24 05:40:15 |
| 合計ジャッジ時間 | 17,887 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 21 TLE * 1 |
ソースコード
import sys
sys.setrecursionlimit(10**6)
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()
Salmonize