結果
| 問題 |
No.1 道のショートカット
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2015-02-08 23:06:52 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
MLE
|
| 実行時間 | - |
| コード長 | 1,575 bytes |
| コンパイル時間 | 95 ms |
| コンパイル使用メモリ | 12,928 KB |
| 実行使用メモリ | 818,120 KB |
| 最終ジャッジ日時 | 2024-07-08 03:45:36 |
| 合計ジャッジ時間 | 3,318 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 4 |
| other | AC * 4 MLE * 1 -- * 35 |
ソースコード
#!/usr/bin/env python3
def memoize(fn):
table = {}
def func(*args):
if args not in table:
table[args] = fn(*args)
return table[args]
return func
class Town(object):
def __init__(self, num):
self.edge_forward = []
self.edge_backward = []
self.num = num
self.is_start = False
self.is_goal = False
def append_forward(self, edge):
self.edge_forward.append(edge)
def append_backward(self, edge):
self.edge_backward.append(edge)
class Edge(object):
def __init__(self, frm, to, cost, distance):
self.frm = frm
self.to = to
self.cost = cost
self.distance = distance
@memoize
def path(town):
if town.is_start:
return [(0, 0)]
p = []
for e in town.edge_backward:
for cost, distance in path(e.frm):
cost += e.cost
distance += e.distance
p.append((cost, distance))
return p
N = int(input())
C = int(input())
V = int(input())
S = [int(s) for s in input().split()]
T = [int(t) for t in input().split()]
Y = [int(y) for y in input().split()]
M = [int(m) for m in input().split()]
town = [Town(num) for num in range(N)]
RODE = zip(S, T, Y, M)
for s, t, y, m in RODE:
town[s - 1].append_forward(Edge(town[s - 1], town[t - 1], y, m))
town[t - 1].append_backward(Edge(town[s - 1], town[t - 1], y, m))
town[0].is_start = True
town[-1].is_goal = True
ways = path(town[-1])
p = [d for c, d in ways if c <= C]
if len(p) == 0:
print(-1)
else:
print(min(p))