結果
| 問題 |
No.1612 I hate Construct a Palindrome
|
| コンテスト | |
| ユーザー |
lam6er
|
| 提出日時 | 2025-04-15 23:37:51 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,356 bytes |
| コンパイル時間 | 150 ms |
| コンパイル使用メモリ | 82,768 KB |
| 実行使用メモリ | 345,864 KB |
| 最終ジャッジ日時 | 2025-04-15 23:39:11 |
| 合計ジャッジ時間 | 21,147 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | -- * 3 |
| other | AC * 2 WA * 9 TLE * 5 -- * 20 |
ソースコード
import sys
from collections import deque
def main():
input = sys.stdin.read().split()
ptr = 0
N = int(input[ptr])
ptr += 1
M = int(input[ptr])
ptr += 1
edges = [[] for _ in range(N + 1)]
all_chars = set()
for i in range(M):
a = int(input[ptr])
ptr += 1
b = int(input[ptr])
ptr += 1
c = input[ptr]
ptr += 1
edges[a].append((b, c, i + 1))
edges[b].append((a, c, i + 1))
all_chars.add(c)
if len(all_chars) == 1:
print(-1)
return
visited = {}
queue = deque()
queue.append((1, None))
visited[(1, None)] = (None, None, None)
while queue:
u, fc = queue.popleft()
for v, c, idx in edges[u]:
new_fc = fc
if fc is None:
new_fc = c
key = (v, new_fc)
if key not in visited:
visited[key] = (u, fc, idx)
queue.append(key)
for u in range(1, N + 1):
for v, c, idx in edges[u]:
if v == N:
current_u = u
target_c = c
found = False
for key in visited:
if key[0] == current_u and key[1] is not None and key[1] != target_c:
fc_u = key[1]
path = []
current_node, current_fc = current_u, key[1]
edge_list = []
while True:
parent_info = visited.get((current_node, current_fc), None)
if parent_info is None:
break
parent_node, parent_fc, edge_idx = parent_info
if edge_idx is None:
break
edge_list.append(edge_idx)
current_node, current_fc = parent_node, parent_fc
edge_list.reverse()
edge_list.append(idx)
if len(edge_list) > 2 * N:
continue
print(len(edge_list))
for e in edge_list:
print(e)
return
print(-1)
if __name__ == "__main__":
main()
lam6er