結果
問題 | No.1502 Many Simple Additions |
ユーザー |
|
提出日時 | 2021-05-08 13:56:16 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 579 ms / 2,000 ms |
コード長 | 2,590 bytes |
コンパイル時間 | 278 ms |
コンパイル使用メモリ | 82,576 KB |
実行使用メモリ | 133,188 KB |
最終ジャッジ日時 | 2024-09-16 18:11:43 |
合計ジャッジ時間 | 10,412 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge6 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 5 |
other | AC * 39 |
ソースコード
from collections import dequen,m,k = map(int,input().split())mod = 10**9+7inf = 10**10e = [[] for i in range(n)]for i in range(m):x,y,z = map(int,input().split())x -= 1y -= 1e[x].append((y,z))e[y].append((x,z))def calc(k):use = [0]*ndis = [-1]*nval = [[-1]*2 for i in range(n)]def bimatch(x,k):bians = Nonedis[x] = 0val[x] = [1,0]use[x] = 1vis = []q = deque([x])while q:now = q.popleft()vis.append(now)a,b = val[now]for nex,c in e[now]:if dis[nex] == -1:dis[nex] = dis[now]^1val[nex] = [-a,c-b]q.append(nex)use[nex] = 1else:na,nb = val[nex]if a+na == 0:if b+nb != c:return 0else:if (c-b-nb)%(a+na):return 0if bians == None:bians = (c-b-nb)//(a+na)else:if bians != (c-b-nb)//(a+na):return 0if bians != None:for v in vis:a,b = val[v]num = bians*a+bif num < 1 or num > k:return 0return 1odd = [inf,-inf]even = [inf,-inf]for v in vis:a,b = val[v]if dis[v]%2:odd[0] = min(odd[0],a+b)odd[1] = max(odd[1],a+b)else:even[0] = min(even[0],a+b)even[1] = max(even[1],a+b)if odd[0] == inf:return kif odd[0] > even[0]:odd,even = even,oddif odd[0] < 1:dif = 1-odd[0]odd = [odd[0]+dif,odd[1]+dif]even = [even[0]-dif,even[1]-dif]if even[1] > k:dif = even[1]-kodd = [odd[0]+dif,odd[1]+dif]even = [even[0]-dif,even[1]-dif]if odd[0] < 1 or odd[1] > k or even[0] < 1 or even[1] > k:return 0count = min(k-odd[1],even[0]-1)+min(k-even[1],odd[0]-1)+1return countans = 1for i in range(n):if use[i]:continueans *= bimatch(i,k)ans %= modreturn ansprint((calc(k)-calc(k-1))%mod)