提出 #6258354


ソースコード 拡げる

import sys
input = sys.stdin.readline
from heapq import heappop, heappush

"""
Bをなるべく使わない行き方を考える
そこから比べてBを増やす利点が少ない
使うBを増やしても距離がNまでしか改善しない
x*(x+1)//2 < N
sqrt(2N) くらいまでしか無駄なBを増やさないようにする
"""

N,M = map(int,input().split())
edge_A = [[] for _ in range(N)]
edge_B = [[] for _ in range(N)]
for _ in range(M):
    c,a,b = map(int,input().split())
    if c == 0:
        edge_A[a].append(b)
        edge_A[b].append(a)
    else:
        edge_B[a].append(b)
        edge_B[b].append(a)

INF = 10 ** 9

# まず、Bの最小回数を求める
min_B = [INF] * N
q = [(0,0)] # Bの回数、場所
min_B[0] = 0
while q:
    bx,x = heappop(q)
    if min_B[x] < bx:
        continue
    for y in edge_A[x]:
        by = bx
        if min_B[y] <= by:
            continue
        min_B[y] = by
        heappush(q, (by,y))
    for y in edge_B[x]:
        by = bx + 1
        if min_B[y] <= by:
            continue
        min_B[y] = by
        heappush(q, (by,y))  

B_plus = int((2*N) ** .5 + 10)

INF = 10 ** 9
dist = [[INF] * B_plus for _ in range(N)]
q = [(0,0)] # 場所、Bの回数
dist[0][0] = 0
d = 0
while q:
    d += 1
    qq = []
    for x,bx in q:
        for y in edge_A[x]:
            my = min_B[y]
            by = bx
            if by >= my + B_plus or dist[y][by-my] != INF:
                continue
            dist[y][by-my] = d
            qq.append((y,by))
        for y in edge_B[x]:
            my = min_B[y]
            by = bx + 1
            if by >= my + B_plus or dist[y][by-my] != INF:
                continue
            dist[y][by-my] = d
            qq.append((y,by))
    q = qq

answer = [min((ab-b) + b*(b+1)//2 for b,ab in zip(range(mb,mb+B_plus), d)) for mb, d in zip(min_B, dist)]

print('\n'.join(map(str,answer)))

提出情報

提出日時
問題 C - 高橋くんと不思議な道
ユーザ maspy
言語 PyPy3 (2.4.0)
得点 100
コード長 1965 Byte
結果 AC
実行時間 2511 ms
メモリ 122744 KiB

ジャッジ結果

セット名 Sample Subtask1
得点 / 配点 0 / 0 100 / 100
結果
AC × 3
AC × 45
セット名 テストケース
Sample sample1.txt, sample2.txt, sample3.txt
Subtask1 sample1.txt, sample2.txt, sample3.txt, A1.txt, A10.txt, A11.txt, A12.txt, A13.txt, A14.txt, A15.txt, A16.txt, A17.txt, A2.txt, A3.txt, A4.txt, A5.txt, A6.txt, A7.txt, A8.txt, A9.txt, B1.txt, B10.txt, B11.txt, B12.txt, B13.txt, B14.txt, B15.txt, B16.txt, B17.txt, B18.txt, B19.txt, B2.txt, B20.txt, B21.txt, B22.txt, B23.txt, B24.txt, B25.txt, B26.txt, B4.txt, B5.txt, B6.txt, B7.txt, B8.txt, B9.txt
ケース名 結果 実行時間 メモリ
A1.txt AC 179 ms 39920 KiB
A10.txt AC 403 ms 54748 KiB
A11.txt AC 413 ms 55004 KiB
A12.txt AC 464 ms 64604 KiB
A13.txt AC 921 ms 103004 KiB
A14.txt AC 731 ms 86108 KiB
A15.txt AC 977 ms 108764 KiB
A16.txt AC 961 ms 106460 KiB
A17.txt AC 981 ms 106204 KiB
A2.txt AC 219 ms 42736 KiB
A3.txt AC 406 ms 56412 KiB
A4.txt AC 760 ms 89052 KiB
A5.txt AC 2511 ms 122744 KiB
A6.txt AC 2189 ms 110940 KiB
A7.txt AC 2343 ms 121948 KiB
A8.txt AC 378 ms 65884 KiB
A9.txt AC 569 ms 73820 KiB
B1.txt AC 770 ms 93276 KiB
B10.txt AC 734 ms 88764 KiB
B11.txt AC 676 ms 78556 KiB
B12.txt AC 745 ms 84316 KiB
B13.txt AC 903 ms 95960 KiB
B14.txt AC 890 ms 95068 KiB
B15.txt AC 819 ms 89820 KiB
B16.txt AC 814 ms 88792 KiB
B17.txt AC 507 ms 64348 KiB
B18.txt AC 539 ms 64240 KiB
B19.txt AC 544 ms 65116 KiB
B2.txt AC 772 ms 93020 KiB
B20.txt AC 574 ms 67420 KiB
B21.txt AC 685 ms 73948 KiB
B22.txt AC 706 ms 75356 KiB
B23.txt AC 687 ms 74716 KiB
B24.txt AC 414 ms 63324 KiB
B25.txt AC 415 ms 63580 KiB
B26.txt AC 459 ms 65756 KiB
B4.txt AC 782 ms 80732 KiB
B5.txt AC 750 ms 90076 KiB
B6.txt AC 763 ms 80476 KiB
B7.txt AC 759 ms 79580 KiB
B8.txt AC 755 ms 91100 KiB
B9.txt AC 748 ms 89948 KiB
sample1.txt AC 161 ms 38256 KiB
sample2.txt AC 161 ms 38256 KiB
sample3.txt AC 162 ms 38256 KiB