結果
| 問題 |
No.826 連絡網
|
| コンテスト | |
| ユーザー |
sho_00
|
| 提出日時 | 2020-04-09 21:45:54 |
| 言語 | PyPy3 (7.3.15) |
| 結果 |
AC
|
| 実行時間 | 1,001 ms / 2,000 ms |
| コード長 | 1,438 bytes |
| コンパイル時間 | 432 ms |
| コンパイル使用メモリ | 82,164 KB |
| 実行使用メモリ | 258,664 KB |
| 最終ジャッジ日時 | 2024-09-13 22:45:14 |
| 合計ジャッジ時間 | 11,194 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| 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