結果
問題 | No.1078 I love Matrix Construction |
ユーザー |
![]() |
提出日時 | 2023-05-17 10:27:00 |
言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
結果 |
TLE
(最新)
AC
(最初)
|
実行時間 | - |
コード長 | 2,898 bytes |
コンパイル時間 | 249 ms |
コンパイル使用メモリ | 12,928 KB |
実行使用メモリ | 213,836 KB |
最終ジャッジ日時 | 2024-12-15 05:47:04 |
合計ジャッジ時間 | 23,396 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 18 TLE * 4 |
ソースコード
import sysreadline=sys.stdin.readlinedef SCC(N,edges):start = [0] * (N + 1)elist = [0] * len(edges)for e in edges:start[e[0] + 1] += 1for i in range(1, N + 1):start[i] += start[i - 1]counter = start[:]for e in edges:elist[counter[e[0]]] = e[1]counter[e[0]] += 1N = Nnow_ord = group_num = 0visited = []low = [0] * Norder = [-1] * Nids = [0] * Nparent = [-1] * Nstack = []for i in range(N):if order[i] == -1:stack.append(i)stack.append(i)while stack:v = stack.pop()if order[v] == -1:low[v] = order[v] = now_ordnow_ord += 1visited.append(v)for i in range(start[v], start[v + 1]):to = elist[i]if order[to] == -1:stack.append(to)stack.append(to)parent[to] = velse:low[v] = min(low[v], order[to])else:if low[v] == order[v]:while True:u = visited.pop()order[u] = Nids[u] = group_numif u == v:breakgroup_num += 1if parent[v] != -1:low[parent[v]] = min(low[parent[v]], low[v])for i, x in enumerate(ids):ids[i] = group_num - 1 - xgroups = [[] for _ in range(group_num)]for i, x in enumerate(ids):groups[x].append(i)return groupsclass TwoSAT:def __init__(self,N):self.N=Nself.edges=[]def Add_Clause(self,i,f,j,g):assert 0<=i<self.Nassert 0<=j<self.Nself.edges.append((2*i+(0 if f else 1),2*j+(1 if g else 0)))self.edges.append((2*j+(0 if g else 1),2*i+(1 if f else 0)))def Satisfiable(self):scc=SCC(2*self.N,self.edges)idx=[None]*2*self.Nfor i,lst in enumerate(scc):for x in lst:idx[x]=iretu=[None]*self.Nfor i in range(self.N):if idx[2*i]==idx[2*i+1]:return Noneretu[i]=idx[2*i]<idx[2*i+1]return retuN=int(readline())S=list(map(int,readline().split()))T=list(map(int,readline().split()))U=list(map(int,readline().split()))TSAT=TwoSAT(N**2)for s,t,u in zip(S,T,U):s-=1;t-=1for j in range(N):TSAT.Add_Clause(s*N+j,u&1,j*N+t,u&2)lst=TSAT.Satisfiable()if lst:ans_lst=[[int(lst[i*N+j])^1 for j in range(N)]for i in range(N)]for ans in ans_lst:print(*ans)else:print(-1)