結果
| 問題 | No.1612 I hate Construct a Palindrome | 
| コンテスト | |
| ユーザー |  lam6er | 
| 提出日時 | 2025-04-16 16:25:46 | 
| 言語 | PyPy3 (7.3.15) | 
| 結果 | 
                                WA
                                 
                             | 
| 実行時間 | - | 
| コード長 | 2,356 bytes | 
| コンパイル時間 | 571 ms | 
| コンパイル使用メモリ | 81,804 KB | 
| 実行使用メモリ | 345,248 KB | 
| 最終ジャッジ日時 | 2025-04-16 16:27:21 | 
| 合計ジャッジ時間 | 14,003 ms | 
| ジャッジサーバーID (参考情報) | judge4 / judge5 | 
(要ログイン)
| ファイルパターン | 結果 | 
|---|---|
| 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()
            
            
            
        