結果
問題 | No.1078 I love Matrix Construction |
ユーザー |
![]() |
提出日時 | 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 |
ソースコード
import syssys.setrecursionlimit(6666666)readline = sys.stdin.readlinereadall = sys.stdin.readns = 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 = 0used = [0] * Ngroup = [0] * Norder = list()def dfs(s):used[s] = 1for t in G[s]:if not used[t]:dfs(t)order.append(s)def rdfs(s, col):group[s] = colused[s] = 1for t in RG[s]:if not used[t]:rdfs(t, col)for v in range(N):if not used[v]:dfs(v)used = [0] * Nfor v in reversed(order):if not used[v]:rdfs(v, group_cnt)group_cnt += 1return group_cnt, groupclass TwoSatisfilability:def __init__(self, N):self.N = Nself.G = [list() for _ in range(N*2)]self.RG = [list() for _ in range(N*2)]self.res = [0] * Ndef 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.resdef _add_edge(self, a, b):self.G[a].append(b)self.RG[b].append(a)returndef 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))returndef 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 + jy = j * n + ctsat.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])returnsolve()