結果
| 問題 |
No.826 連絡網
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2019-05-03 22:16:08 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 117 ms / 2,000 ms |
| コード長 | 949 bytes |
| コンパイル時間 | 2,231 ms |
| コンパイル使用メモリ | 195,800 KB |
| 最終ジャッジ日時 | 2025-01-07 03:26:43 |
|
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 30 |
ソースコード
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define rep(i,n) for(int (i)=0;(i)<(n);(i)++)
#define repeat(i,s,n) for(int (i)=s; (i)<(n); (i)++)
#define revrep(i,n) for(int (i)=(n)-1;i>=0; i--)
int MAX_N=1000000;
vector<int> UF=vector<int>(MAX_N+1);
void init() {
for(int i=0; i<MAX_N+1; i++)
UF[i]=i;
}
int root(int a) {
if(UF[a]==a)
return a;
return UF[a]=root(UF[a]);
}
void unite(int a, int b) {
a=root(a);
b=root(b);
if(a==b)
return;
UF[a]=b;
}
bool same(int a, int b) {
return root(a)==root(b);
}
int main() {
cin.tie(0);
ios::sync_with_stdio(false);
cout<<setprecision(std::numeric_limits<float>::max_digits10);
int n,p;
cin>>n>>p;
init();
for(int k=2; k<n; k++) {
int s=k;
while(s+k<=n) {
unite(s,s+k);
s+=k;
}
}
int ans=0;
for(int x=1; x<=n; x++) {
if(same(x,p)) {
ans++;
}
}
cout << ans << endl;
return 0;
}