World Robot Contest2025-2026Algorithm Application ThemeJunior Highwrc.hao.work
WRC
Contest Archive / Structured Dossiers青少年算法应用训练档案馆

把训练题、知识点、执行证据和最终解题档案统一归档成可直接浏览的竞赛资料库。

Archive30 Cases

四大文化赛道完整展开

AccessHTTPS

完整题面 / 题解 / 运行证据

No Rounded CornersTailwind FirstDossier Ready
02-solution/src/python/main.py

main.py

站内文件视图直接读取仓库内容,Markdown 使用文档排版渲染,其余文本文件保持原始排版,方便校对训练证据链。

文件类型.py

10-cases/s3-jh-05-station-relay/02-solution/src/python/main.py

import heapq
import sys


def solve(data: str) -> str:
    tokens = list(map(int, data.split()))
    if not tokens:
        return ""
    it = iter(tokens)
    n = next(it)
    m = next(it)
    start = next(it)
    target = next(it)
    graph = [[] for _ in range(n + 1)]
    for _ in range(m):
        u = next(it)
        v = next(it)
        days = next(it)
        graph[u].append((v, days))
        graph[v].append((u, days))
    inf = (10 ** 18, 10 ** 18)
    dist = [inf] * (n + 1)
    prev = [-1] * (n + 1)
    dist[start] = (0, 0)
    heap = [(0, 0, start)]
    while heap:
        steps, days, node = heapq.heappop(heap)
        if (steps, days) != dist[node]:
            continue
        for nxt, cost in graph[node]:
            cand = (steps + 1, days + cost)
            if cand < dist[nxt]:
                dist[nxt] = cand
                prev[nxt] = node
                heapq.heappush(heap, (cand[0], cand[1], nxt))
    if dist[target] == inf:
        return "relay_count=-1\ntotal_days=-1\npath=IMPOSSIBLE"
    path = []
    cur = target
    while cur != -1:
        path.append(cur)
        cur = prev[cur]
    path.reverse()
    return "\n".join(
        [
            f"relay_count={dist[target][0]}",
            f"total_days={dist[target][1]}",
            f"path={'->'.join(map(str, path))}",
        ]
    )


if __name__ == "__main__":
    sys.stdout.write(solve(sys.stdin.read()).strip())
    sys.stdout.write("\n")