結果
問題 | No.1502 Many Simple Additions |
ユーザー |
![]() |
提出日時 | 2024-01-02 02:09:16 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 2,772 bytes |
コンパイル時間 | 284 ms |
コンパイル使用メモリ | 82,504 KB |
実行使用メモリ | 116,588 KB |
最終ジャッジ日時 | 2024-09-27 17:38:29 |
合計ジャッジ時間 | 7,143 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 21 WA * 18 |
ソースコード
import sys# sys.setrecursionlimit(1000005)# sys.set_int_max_str_digits(200005)int1 = lambda x: int(x)-1pDB = lambda *x: print(*x, end="\n", file=sys.stderr)p2D = lambda x: print(*x, sep="\n", end="\n\n", file=sys.stderr)def II(): return int(sys.stdin.readline())def LI(): return list(map(int, sys.stdin.readline().split()))def LLI(rows_number): return [LI() for _ in range(rows_number)]def LI1(): return list(map(int1, sys.stdin.readline().split()))def LLI1(rows_number): return [LI1() for _ in range(rows_number)]def SI(): return sys.stdin.readline().rstrip()# dij = [(0, 1), (-1, 0), (0, -1), (1, 0)]dij = [(0, 1), (-1, 0), (0, -1), (1, 0), (1, 1), (1, -1), (-1, 1), (-1, -1)]# inf = -1-(-1 << 31)inf = -1-(-1 << 62)md = 10**9+7# md = 998244353from collections import defaultdictn,m,k=LI()to=[[] for _ in range(n)]uv2z=defaultdict(int)for _ in range(m):u,v,z=LI()u,v=u-1,v-1to[u].append(v)to[v].append(u)uv2z[u,v]=uv2z[v,u]=zdef dfs(root=0):aa[root]=1stack = [(u, root) for u in to[root]]lmin=rmin=inflmax=rmax=-infwhile stack:u, p = stack.pop()z = uv2z[u, p]if aa[u]:if aa[u]==aa[p]:# 2x=au(z-bu-bp)x2=aa[u]*(z-bb[u]-bb[p])if x2 < 2 or x2 > k*2 or x2&1:print(0)exit()x=x2//2if xx[root]==None:xx[root]=xelif xx[root]!=x:print(0)exit()elif bb[u]!=bb[p]:print(0)exit()else:parent[u]=paa[u]=-aa[p]bb[u]=z-bb[p]if aa[u]==1:lmin,lmax=min(lmin,bb[u]),max(lmax,bb[u])else:rmin, rmax = min(rmin, bb[u]), max(rmax, bb[u])for v in to[u]:if aa[v]:continuestack.append((v,u))# x+lmin>=1# x>=1-lmin# -x+rmin>=1# x<=rmin-1# x+lmax<=k# x<=k-lmax# -x+rmax<=k# x>=rmax-kif xx[root]==None:mn=max(1-lmin,rmax-k,1)mx=min(rmin-1,k-lmax,k)a1=max(0,mx-mn+1)mn=max(1-lmin,rmax-k+1,1)mx=min(rmin-1,k-1-lmax,k-1)a2=max(0,mx-mn+1)return a1,a2x=xx[root]if x+lmin<1 or -x+rmin<1:print(0)exit()a1=a2=0if x+lmax<=k and -x+rmax<=k:a1=1if x+lmax<k and -x+rmax<k:a2=1return a1,a2parent = [-1]*naa=[0]*nbb=[0]*nxx=[None]*ns1=s2=1for u in range(n):if aa[u]:continuea1,a2=dfs(u)s1*=a1s2*=a2s1%=mds2%=md# print(u,a1,a2,s1,s2)# print(aa)# print(bb)# print(xx)print((s1-s2)%md)