結果
問題 | No.517 壊れたアクセサリー |
ユーザー |
![]() |
提出日時 | 2021-09-19 15:02:33 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 46 ms / 2,000 ms |
コード長 | 1,570 bytes |
コンパイル時間 | 278 ms |
コンパイル使用メモリ | 82,276 KB |
実行使用メモリ | 54,272 KB |
最終ジャッジ日時 | 2024-07-01 18:14:24 |
合計ジャッジ時間 | 2,131 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 4 |
other | AC * 15 |
ソースコード
from collections import dequedef cycle_detectable_topological_sort(g, ind):V = len(g)order = []depth = [-1]*Vfor i in range(V):if not ind[i]:order.append(i)depth[i] = 0q = deque(order)while q:v = q.popleft()cur_depth = depth[v]for u in g[v]:ind[u] -= 1if not ind[u]:depth[u] = max(depth[u], cur_depth+1)q.append(u)order.append(u)if len(order) == V:return (order, depth)else:return (None, None)n = int(input())A = [str(input()) for i in range(n)]m = int(input())B = [str(input()) for i in range(m)]g = [[] for i in range(26)]ind = [0]*26E = set()for a in A:for i in range(len(a)-1):c1 = ord(a[i])-ord('A')c2 = ord(a[i+1])-ord('A')g[c1].append(c2)ind[c2] += 1E.add((c1, c2))for b in B:for i in range(len(b)-1):c1 = ord(b[i])-ord('A')c2 = ord(b[i+1])-ord('A')g[c1].append(c2)ind[c2] += 1E.add((c1, c2))order, _ = cycle_detectable_topological_sort(g, ind)used = set()for a in A:for c in a:c = ord(c)-ord('A')used.add(c)for b in B:for c in b:c = ord(c)-ord('A')used.add(c)order = [i for i in order if i in used]for k in range(len(order)-1):c1 = order[k]c2 = order[k+1]if (c1, c2) not in E:print(-1)exit()else:ans = [chr(i+ord('A')) for i in order]print(''.join(ans))