結果
問題 | No.1612 I hate Construct a Palindrome |
ユーザー |
![]() |
提出日時 | 2021-07-21 22:36:12 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 712 ms / 2,000 ms |
コード長 | 1,571 bytes |
コンパイル時間 | 195 ms |
コンパイル使用メモリ | 82,488 KB |
実行使用メモリ | 150,060 KB |
最終ジャッジ日時 | 2024-07-17 19:35:54 |
合計ジャッジ時間 | 10,723 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge5 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 36 |
ソースコード
from collections import dequen, m = map(int, input().split())to = [[] for _ in range(n)]for i in range(1, m + 1):a, b, c = input().split()a = int(a) - 1b = int(b) - 1c = ord(c) - 97to[a].append((i, b, c))to[b].append((i, a, c))z = -1for i in range(n):seen = 0for _, _, c in to[i]:seen |= 1 << cif bin(seen).count('1') >= 2:z = ibreakif z == -1:print(-1)exit()INF = 10 ** 9def shortest_path(s, t):pre = [None] * ndist = [INF] * nq = deque()dist[s] = 0q.append(s)while q:u = q.popleft()for i, v, c in to[u]:if dist[v] == INF:dist[v] = dist[u] + 1pre[v] = (u, i, c)q.append(v)u = tpath = []s = []while pre[u] is not None:u, i, c = pre[u]path.append(i)s.append(c)s.reverse()path.reverse()return path, sp1, s1 = shortest_path(0, z)p2, s2 = shortest_path(n - 1, z)s = s1 + s2[::-1]if s == s[::-1]:if s1 == s2:last_edge = p1[-1]last_col = s1[-1]for i, _, c in to[z]:if c != last_col:breakp1 += last_edge, last_edge, i, ielse:seen = [False] * 26for i, _, c in to[z]:if seen[c]:continueseen[c] = Truet = s1 + [c, c] + s2[::-1]if t != t[::-1]:p1 += i, ibreakp = p1 + p2[::-1]print(len(p))print(*p, sep='\n')