結果

問題 No.1364 [Renaming] Road to Cherry from Zelkova
ユーザー ophhdn
提出日時 2021-08-08 12:40:27
言語 PyPy3
(7.3.15)
結果
WA  
実行時間 -
コード長 2,091 bytes
コンパイル時間 636 ms
コンパイル使用メモリ 82,308 KB
実行使用メモリ 134,312 KB
最終ジャッジ日時 2024-09-19 08:16:13
合計ジャッジ時間 16,038 ms
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1 WA * 2
other AC * 19 WA * 26
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

from collections import defaultdict, deque, Counter
from heapq import heappush, heappop, heapify
import math
import bisect
import random
from itertools import permutations, accumulate, combinations, product
import sys
import string
from bisect import bisect_left, bisect_right
from math import factorial, ceil, floor
from operator import mul
from functools import reduce
import pprint
sys.setrecursionlimit(10 ** 9)
INF = 10 ** 20
def LI(): return list(map(int, sys.stdin.readline().split()))
def I(): return int(sys.stdin.readline())
def LS(): return sys.stdin.buffer.readline().rstrip().decode('utf-8').split()
def S(): return sys.stdin.buffer.readline().rstrip().decode('utf-8')
def IR(n): return [I() for i in range(n)]
def LIR(n): return [LI() for i in range(n)]
def SR(n): return [S() for i in range(n)]
def LSR(n): return [LS() for i in range(n)]
def SRL(n): return [list(S()) for i in range(n)]
def MSRL(n): return [[int(j) for j in list(S())] for i in range(n)]
mod = 10**9+7
n,m=LI()
G=[[]for _ in range(n+1)]
for _ in range(m):
u,v,l,a=LI()
G[u]+=[(v,l,a)]
def topological_sort(G):
n = len(G)
in_degree = [0] * n
for u in range(n):
for v,_,_ in G[u]:
in_degree[v] += 1
topological_order = []
que = deque()
for i in range(n):
if in_degree[i] == 0:
que += [i]
while que:
u = que.pop()
topological_order += [u]
for v,_,_ in G[u]:
in_degree[v] -= 1
if in_degree[v] == 0:
que += [v]
return topological_order
q=deque([0])
D=[0]*(n+1)
D2=[0]*(n+1)
D2[0]=1
D[0]=0
order=topological_sort(G)
s=set()
for ui in order:
s.add(ui)
for vi,li,ai in G[ui]:
if vi in s:
print("INF")
exit()
D[vi]+=(D[ui]+D2[ui]*li)*ai%mod
D2[vi]+=D2[ui]*ai
D2[vi]%=mod
qq=[0]
D3=[0]*(n+1)
D3[0]=1
while qq:
uk=qq.pop()
for vk,_,_ in G[uk]:
if D3[vk]:
continue
D3[vk]=1
qq+=[vk]
if not D2[n] and D3[n]:
print("INF")
else:
print(D2[n])
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0