結果
| 問題 | No.826 連絡網 |
| コンテスト | |
| ユーザー |
sho_00
|
| 提出日時 | 2020-04-09 21:45:54 |
| 言語 | PyPy3 (7.3.17) |
| 結果 |
AC
|
| 実行時間 | 776 ms / 2,000 ms |
| コード長 | 1,438 bytes |
| 記録 | |
| コンパイル時間 | 630 ms |
| コンパイル使用メモリ | 84,992 KB |
| 実行使用メモリ | 299,880 KB |
| 最終ジャッジ日時 | 2026-04-04 08:23:03 |
| 合計ジャッジ時間 | 15,097 ms |
|
ジャッジサーバーID (参考情報) |
judge3_0 / judge5_1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 30 |
ソースコード
import math
N,P=map(int,input().split())
def searchPrimeNum(N):
max = int(math.sqrt(N))
searchList = [i for i in range(2,N+1)]
primeNum = []
while searchList[0] <= max:
primeNum.append(searchList[0])
tmp = searchList[0]
searchList = [i for i in searchList if i % tmp != 0]
primeNum.extend(searchList)
return primeNum
class UnionFind:
def __init__(self, n):
self.n = n
self.p = [e for e in range(n)]
self.rank = [0] * n
self.size = [1] * n
def same(self, u, v):
return self.find_set(u) == self.find_set(v)
def unite(self, u, v):
u = self.find_set(u)
v = self.find_set(v)
if u == v:
return
if self.rank[u] > self.rank[v]:
self.p[v] = u
self.size[u] += self.size[v]
else:
self.p[u] = v
self.size[v] += self.size[u]
if self.rank[u] == self.rank[v]:
self.rank[v] += 1
def find_set(self, u):
if u != self.p[u]:
self.p[u] = self.find_set(self.p[u])
return self.p[u]
def update_p(self):
for u in range(self.n):
self.find_set(u)
def get_size(self, u):
return self.size[self.find_set(u)]
if P==1:
print(1)
else:
uf=UnionFind(N)
table=searchPrimeNum(N)
for v in table:
i=2
while v*i<=N:
uf.unite(v-1,v*i-1)
i+=1
print(uf.get_size(P-1))
sho_00