BOJ 1939重量制限
7864 ワード
https://www.acmicpc.net/problem/1939
時間1秒、メモリ128 MB
input : N, M(2≤N≤10,000)(1≤M≤100,000) M行、A、B(1≦A、B≦N)、C(1≦C≦10000000) 2つの異なる整数は、島の番号を表す.
output : 解答出力 条件:フルブリッジ双方向 橋ごとに重量制限があるので、勝手に物を移動することはできません.重量制限を超えた貨物が橋を渡ると、橋が倒壊します. 可動品重量の最高価格 どうせ注意しなければならないのは、私が今何キロ運んでいるのか、これは到着地点まで移動できるのかということです.
では、bfsが終了した場所は現在の位置と終了点が同時にあるべきで、無視された部分はすでに訪問した場所であり、橋が今重さに耐えられない時である.
そして最大重量を見つけなければならないので、この探索を利用して見つけなければなりません.重さは10億に達し、時間の複雑さが高い.
時間1秒、メモリ128 MB
input :
output :
では、bfsが終了した場所は現在の位置と終了点が同時にあるべきで、無視された部分はすでに訪問した場所であり、橋が今重さに耐えられない時である.
そして最大重量を見つけなければならないので、この探索を利用して見つけなければなりません.重さは10億に達し、時間の複雑さが高い.
import sys
from collections import deque
def bfs():
check = [0] * (n + 1)
check[start] = 1
while q:
now = q.popleft()
if now == end:
return 1
for node, cost in graph[now]:
if check[node] == 1 or mid > cost:
continue
q.append(node)
check[node] = 1
return 0
n, m = map(int, sys.stdin.readline().split())
graph = [[] for i in range(n + 1)]
for i in range(m):
a, b, c = map(int, sys.stdin.readline().split())
graph[a].append((b, c))
graph[b].append((a, c))
start, end = map(int, sys.stdin.readline().split())
left, right = 1, 1000000000
while left <= right:
q = deque([start])
mid = (left + right) // 2
if bfs() == 0:
right = mid - 1
else:
left = mid + 1
print(right)
Reference
この問題について(BOJ 1939重量制限), 我々は、より多くの情報をここで見つけました https://velog.io/@jsin2475/BOJ-1939-중량-제한テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol