結果
問題 | No.1502 Many Simple Additions |
ユーザー | 遭難者 |
提出日時 | 2021-04-18 20:48:18 |
言語 | Python3 (3.12.2 + numpy 1.26.4 + scipy 1.12.0) |
結果 |
AC
|
実行時間 | 1,623 ms / 2,000 ms |
コード長 | 3,279 bytes |
コンパイル時間 | 514 ms |
コンパイル使用メモリ | 13,056 KB |
実行使用メモリ | 74,996 KB |
最終ジャッジ日時 | 2024-09-26 12:29:20 |
合計ジャッジ時間 | 18,959 ms |
ジャッジサーバーID (参考情報) |
judge2 / judge4 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 33 ms
11,136 KB |
testcase_01 | AC | 32 ms
11,264 KB |
testcase_02 | AC | 33 ms
11,008 KB |
testcase_03 | AC | 33 ms
11,264 KB |
testcase_04 | AC | 33 ms
11,392 KB |
testcase_05 | AC | 33 ms
11,136 KB |
testcase_06 | AC | 33 ms
11,392 KB |
testcase_07 | AC | 32 ms
11,264 KB |
testcase_08 | AC | 32 ms
11,264 KB |
testcase_09 | AC | 33 ms
11,136 KB |
testcase_10 | AC | 33 ms
11,264 KB |
testcase_11 | AC | 33 ms
11,264 KB |
testcase_12 | AC | 32 ms
11,264 KB |
testcase_13 | AC | 33 ms
11,136 KB |
testcase_14 | AC | 32 ms
11,008 KB |
testcase_15 | AC | 33 ms
11,392 KB |
testcase_16 | AC | 33 ms
11,264 KB |
testcase_17 | AC | 33 ms
11,264 KB |
testcase_18 | AC | 33 ms
11,136 KB |
testcase_19 | AC | 33 ms
11,136 KB |
testcase_20 | AC | 33 ms
11,264 KB |
testcase_21 | AC | 33 ms
11,264 KB |
testcase_22 | AC | 34 ms
11,264 KB |
testcase_23 | AC | 34 ms
11,264 KB |
testcase_24 | AC | 34 ms
11,264 KB |
testcase_25 | AC | 34 ms
11,264 KB |
testcase_26 | AC | 34 ms
11,136 KB |
testcase_27 | AC | 894 ms
51,840 KB |
testcase_28 | AC | 921 ms
52,224 KB |
testcase_29 | AC | 701 ms
37,568 KB |
testcase_30 | AC | 1,614 ms
74,996 KB |
testcase_31 | AC | 1,611 ms
74,876 KB |
testcase_32 | AC | 1,623 ms
74,988 KB |
testcase_33 | AC | 1,096 ms
48,288 KB |
testcase_34 | AC | 1,120 ms
49,708 KB |
testcase_35 | AC | 1,111 ms
48,404 KB |
testcase_36 | AC | 649 ms
34,816 KB |
testcase_37 | AC | 669 ms
34,560 KB |
testcase_38 | AC | 767 ms
40,064 KB |
testcase_39 | AC | 450 ms
28,672 KB |
testcase_40 | AC | 440 ms
26,452 KB |
testcase_41 | AC | 218 ms
18,900 KB |
testcase_42 | AC | 1,132 ms
56,952 KB |
testcase_43 | AC | 34 ms
11,264 KB |
ソースコード
from collections import defaultdict from collections import deque class UnionFind(): def __init__(self, n): self.n = n self.parents = [-1] * n def find(self, x): if self.parents[x] < 0: return x else: self.parents[x] = self.find(self.parents[x]) return self.parents[x] def union(self, x, y): x = self.find(x) y = self.find(y) if x == y: return if self.parents[x] > self.parents[y]: x, y = y, x self.parents[x] += self.parents[y] self.parents[y] = x def size(self, x): return -self.parents[self.find(x)] def same(self, x, y): return self.find(x) == self.find(y) def members(self, x): root = self.find(x) return [i for i in range(self.n) if self.find(i) == root] def roots(self): return [i for i, x in enumerate(self.parents) if x < 0] def group_count(self): return len(self.roots()) def all_group_members(self): group_members = defaultdict(list) for member in range(self.n): group_members[self.find(member)].append(member) return group_members mod=10**9+7 INF=10**100 n,m,k=map(int,input().split()) edge=[[] for i in range(n)] uf=UnionFind(n) for i in range(m): a,b,c=map(int,input().split()) edge[a-1].append([b-1,c]) edge[b-1].append([a-1,c]) uf.union(a-1,b-1) def f(G): d={} for i in range(len(G)): d[G[i]]=i q=deque() q.append([0,0]) seen=[[INF,INF] for i in range(len(G))] seen[0][0]=0 while q: x=q.pop() for v in edge[G[x[0]]]: V=d[v[0]] W=v[1] if seen[V][(x[1]+1)%2]==INF: if x[1]==0: seen[V][1]=W-seen[x[0]][0] else: seen[V][0]=W-seen[x[0]][1] if seen[V][0]!=INF and seen[V][1]!=INF: if (seen[V][0]+seen[V][1])%2==1: return 0,0 else: return bfs((seen[V][1]-seen[V][0])//2,G) else: q.append([V,(x[1]+1)%2]) else: if x[1]==0: if seen[x[0]][0]+seen[V][1]!=W: return 0,0 else: if seen[x[0]][1]+seen[V][0]!=W: return 0,0 min0=INF+1 min1=INF+1 max0=-INF+1 max1=-INF+1 for i in range(len(G)): if seen[i][0]!=INF: min0=min(min0,seen[i][0]) max0=max(max0,seen[i][0]) if seen[i][1]!=INF: min1=min(min1,seen[i][1]) max1=max(max1,seen[i][1]) return max(min(k-max0,min1-1)-max(1-min0,max1-k,0)+1,0),max(min((k-1)-max0,min1-1)-max(1-min0,max1-(k-1),0)+1,0) def bfs(a,g): seen2=[INF]*len(g) seen2[0]=a d2={} for i in range(len(g)): d2[g[i]]=i q2=deque() q2.append(0) flag=True while q2: y=q2.pop() for vertex2 in edge[g[y]]: V2=d2[vertex2[0]] W2=vertex2[1] if seen2[V2]==INF: seen2[V2]=W2-seen2[y] q2.append(V2) else: if seen2[V2]!=W2-seen2[y]: flag=False num1=0 num2=0 if flag and min(seen2)>0 and max(seen2)<=k: num1=1 if flag and min(seen2)>0 and max(seen2)<=k-1: num2=1 return num1,num2 cnt1=1 cnt2=1 for i in list(uf.all_group_members().values()): a,b=f(i) cnt1*=a cnt2*=b cnt1=cnt1%mod cnt2=cnt2%mod print((cnt1-cnt2)%mod)