結果
問題 | No.74 貯金箱の退屈 |
ユーザー |
![]() |
提出日時 | 2019-08-29 22:46:38 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 42 ms / 5,000 ms |
コード長 | 1,439 bytes |
コンパイル時間 | 166 ms |
コンパイル使用メモリ | 82,280 KB |
実行使用メモリ | 54,468 KB |
最終ジャッジ日時 | 2024-11-17 17:27:11 |
合計ジャッジ時間 | 2,498 ms |
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 30 |
ソースコード
import sysinput = sys.stdin.readlineclass Unionfind:def __init__(self, n):self.par = [-1] * nself.rank = [1] * ndef root(self, x):if self.par[x] < 0:return xself.par[x] = self.root(self.par[x])return self.par[x]def unite(self, x, y):rx, ry = self.root(x), self.root(y)if rx != ry:if self.rank[rx] >= self.rank[ry]:self.par[rx] += self.par[ry]self.par[ry] = rxif self.rank[rx] == self.rank[ry]:self.rank[rx] += 1else:self.par[ry] += self.par[rx]self.par[rx] = rydef is_same(self, x, y):return self.root(x) == self.root(y)def count(self, x):return -self.par[self.root(x)]N = int(input())D = list(map(int, input().split()))W = list(map(int, input().split()))uf = Unionfind(N)s = []for i in range(N):if (i+D[i])%N == (i-D[i])%N:s.append((i+D[i])%N)uf.unite((i+D[i])%N, (i-D[i])%N)d = {i: [0, 0, 0] for i in range(N)}for i in range(N):d[uf.root(i)][W[i]] += 1if i in s:d[uf.root(i)][2] += 1for i in range(N):if d[i] == [0, 0, 0]:continueif d[i][2] == 0 and d[i][0] % 2 == 1:print('No')breakelse:print('Yes')