結果

問題 No.1451 集団登校
ユーザー NatsubiSogan
提出日時 2021-04-11 11:57:54
言語 Python3
(3.13.1 + numpy 2.2.1 + scipy 1.14.1)
結果
AC  
実行時間 889 ms / 2,000 ms
コード長 1,603 bytes
コンパイル時間 93 ms
コンパイル使用メモリ 12,928 KB
実行使用メモリ 32,256 KB
最終ジャッジ日時 2024-06-27 07:32:30
合計ジャッジ時間 10,613 ms
ジャッジサーバーID
(参考情報)
judge2 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 3
other AC * 27
権限があれば一括ダウンロードができます

ソースコード

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

class UnionFind():
def __init__(self, n):
self.n = n
self.par = [-1] * self.n
def find(self, x):
r = x
while not self.par[r] < 0:
r = self.par[r]
t = x
while t != r:
m = t
t = self.par[t]
self.par[m] = r
return r
def unite(self, x, y):
p = self.find(x)
q = self.find(y)
if p == q:
return None
if self.par[p] >= self.par[q]:
p, q = q, p
self.par[p] += self.par[q]
self.par[q] = p
def same(self, x, y):
return self.find(x) == self.find(y)
def size(self, x):
return -self.par[self.find(x)]
#Euclid
def extgcd(a, b, d = 0):
g = a
if b == 0:
x, y = 1, 0
else:
x, y, g = extgcd(b, a % b)
x, y = y, x - a // b * y
return x, y, g
#mod p
def invmod(a, p):
x, y, g = extgcd(a, p)
x %= p
return x
mod = 10 ** 9 + 7
n, m = map(int, input().split())
UF = UnionFind(n)
g = [[i] for i in range(n)]
ans = [1] * n
inv2 = invmod(2, mod)
for _ in range(m):
a, b = map(int, input().split())
a -= 1; b -= 1
if UF.same(a, b):
continue
if UF.size(a) > UF.size(b):
a, b = b, a
pa, pb = UF.find(a), UF.find(b)
if UF.size(a) < UF.size(b):
for i in g[pa]:
ans[i] = 0
else:
for i in g[pa]:
g[pb].append(i)
for i in g[pb]:
ans[i] *= inv2
ans[i] %= mod
UF.unite(a, b)
for i in ans: print(i)
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0