提出 #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 | ||||
| 結果 |
|
|
| セット名 | テストケース |
|---|---|
| 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 |