提出 #22251935


ソースコード 拡げる

import collections
import heapq


class Dijkstra:
    def __init__(self):
        self.e = collections.defaultdict(list)

    def add(self, u, v, d, directed=False):
        """
        #0-indexedでなくてもよいことに注意
        #u = from, v = to, d = cost
        #directed = Trueなら、有向グラフである
        """
        if directed is False:
            self.e[u].append([v, d])
            self.e[v].append([u, d])
        else:
            self.e[u].append([v, d])

    def delete(self, u, v):
        self.e[u] = [_ for _ in self.e[u] if _[0] != v]
        self.e[v] = [_ for _ in self.e[v] if _[0] != u]

    def search(self, s):
        """
        :param s: 始点
        :return: 始点から各点までの最短経路
        """
        d = collections.defaultdict(lambda: float('inf'))
        d[s] = 0
        q = []
        heapq.heappush(q, (0, s))
        v = collections.defaultdict(bool)
        while len(q):
            k, u = heapq.heappop(q)
            if v[u]:
                continue
            v[u] = True

            for uv, ud in self.e[u]:
                if v[uv]:
                    continue
                vd = k + ud
                if d[uv] > vd:
                    d[uv] = vd
                    heapq.heappush(q, (vd, uv))

        return d

R,C = map(int, input().split())
A = [list(map(int, input().split())) for i in range(R)]
B = [list(map(int, input().split())) for i in range(R-1)]
graph = Dijkstra()
#1つ目と2つ目の条件を満たす
for i in range(R):
    for j in range(C-1):
        graph.add(C*i+j,C*i+j+1,A[i][j],False)
#3つ目の条件を満たす
for i in range(R-1):
    for j in range(C):
        graph.add(C*i+j,C*(i+1)+j,B[i][j],True)
#超頂点で4つ目の条件を満たす
for i in range(R):
    for j in range(C):
        graph.add(C*i+j,-(C*i+j),1,True)
        graph.add(-(C*(i+1)+j),-(C*i+j),1,True)
        graph.add(-(C*i+j),C*i+j,0,True)

d=graph.search(0)
print(d[R*C-1])


提出情報

提出日時
問題 E - 潜入
ユーザ H20
言語 PyPy3 (7.3.0)
得点 500
コード長 2053 Byte
結果 AC
実行時間 1792 ms
メモリ 398480 KiB

ジャッジ結果

セット名 Sample All
得点 / 配点 0 / 0 500 / 500
結果
AC × 3
AC × 29
セット名 テストケース
Sample 01_sample.txt, 02_sample.txt, 03_sample.txt
All 01_sample.txt, 02_sample.txt, 03_sample.txt, 04_random.txt, 05_random.txt, 06_random.txt, 07_random.txt, 08_random.txt, 09_random.txt, 10_random.txt, 11_random.txt, 12_random.txt, 13_random.txt, 14_random.txt, 15_random.txt, 16_random.txt, 17_random.txt, 18_random.txt, 19_random.txt, 20_random.txt, 21_random.txt, 22_random.txt, 23_random.txt, 24_max.txt, 25_max.txt, 26_max.txt, 27_max.txt, 28_zigzag.txt, 29_zigzag.txt
ケース名 結果 実行時間 メモリ
01_sample.txt AC 76 ms 65392 KiB
02_sample.txt AC 58 ms 66528 KiB
03_sample.txt AC 59 ms 65236 KiB
04_random.txt AC 148 ms 77580 KiB
05_random.txt AC 289 ms 99924 KiB
06_random.txt AC 163 ms 79568 KiB
07_random.txt AC 58 ms 66524 KiB
08_random.txt AC 61 ms 66492 KiB
09_random.txt AC 167 ms 78940 KiB
10_random.txt AC 113 ms 75600 KiB
11_random.txt AC 272 ms 95084 KiB
12_random.txt AC 211 ms 84604 KiB
13_random.txt AC 812 ms 224620 KiB
14_random.txt AC 208 ms 84156 KiB
15_random.txt AC 173 ms 82260 KiB
16_random.txt AC 417 ms 134764 KiB
17_random.txt AC 131 ms 77208 KiB
18_random.txt AC 96 ms 74812 KiB
19_random.txt AC 213 ms 83732 KiB
20_random.txt AC 644 ms 189292 KiB
21_random.txt AC 81 ms 74800 KiB
22_random.txt AC 273 ms 95816 KiB
23_random.txt AC 102 ms 75692 KiB
24_max.txt AC 1777 ms 385848 KiB
25_max.txt AC 1792 ms 385272 KiB
26_max.txt AC 1314 ms 398480 KiB
27_max.txt AC 1520 ms 384116 KiB
28_zigzag.txt AC 1437 ms 381880 KiB
29_zigzag.txt AC 1693 ms 381616 KiB