結果
| 問題 | No.3463 Beltway |
| コンテスト | |
| ユーザー |
まぬお
|
| 提出日時 | 2026-02-28 18:57:33 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 1,042 ms / 2,000 ms |
| コード長 | 2,301 bytes |
| 記録 | |
| コンパイル時間 | 2,372 ms |
| コンパイル使用メモリ | 77,984 KB |
| 実行使用メモリ | 342,760 KB |
| 最終ジャッジ日時 | 2026-02-28 18:57:44 |
| 合計ジャッジ時間 | 8,752 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 17 |
ソースコード
from collections import deque, defaultdict, Counter
from bisect import bisect_left, bisect_right
from itertools import permutations, combinations, groupby
from heapq import heappop, heappush
import math, sys
input = lambda: sys.stdin.readline().rstrip("\r\n")
def printl(li, sep=" "): print(sep.join(map(str, li)))
def yn(flag): print(Yes if flag else No)
_int = lambda x: int(x)-1
MOD = 998244353 #10**9+7
INF = 1<<60
Yes, No = "Yes", "No"
import pypyjit, sys
pypyjit.set_param('max_unroll_recursion=-1')
sys.setrecursionlimit(10**6)
def find_bridges(n, edges):
"""
n: 頂点数
edges: (u, v) のリスト
return: 各辺が橋なら1, そうでなければ0のリスト
"""
E = [[] for _ in range(n)]
for i, (u, v) in enumerate(edges):
E[u].append((v, i))
E[v].append((u, i))
ord = [-1] * n
low = [-1] * n
is_bridge = [0] * len(edges)
timer = 0
def dfs(u, parent_edge_id=-1):
nonlocal timer
ord[u] = low[u] = timer
timer += 1
for v, edge_id in E[u]:
if edge_id == parent_edge_id:
continue
if ord[v] != -1:
low[u] = min(low[u], ord[v])
else:
dfs(v, edge_id)
low[u] = min(low[u], low[v])
if ord[u] < low[v]:
is_bridge[edge_id] = 1
for i in range(n):
if ord[i] == -1:
dfs(i)
return is_bridge
def ctypes(li, types):
assert len(li) == len(types)
return [t(a) for a, t in zip(li, types)]
def tinput(*types):
li = input().split()
return ctypes(li, types)
def qinput(*types):
li = input().split()
t = int(li[0])
if len(li) == 1: return t, types[t-1][0](li[1])
else: return t, ctypes(li[1:], types[t-1])
N, M, si, ti = tinput(int, int, _int, _int)
edges = []
for _ in range(M):
u, v = map(_int, input().split())
edges.append((u, v))
bridge = find_bridges(N, edges)
E = [[] for _ in range(N)]
for i in range(M):
u, v = edges[i]
E[u].append((v, bridge[i]))
E[v].append((u, bridge[i]))
q = deque([si])
vis = [-1]*N
vis[si] = 0
while q:
i = q.popleft()
for j, e in E[i]:
if vis[j] >= 0: continue
vis[j] = vis[i]+(e^1)
q.append(j)
print(vis[ti])
まぬお