結果
| 問題 |
No.826 連絡網
|
| コンテスト | |
| ユーザー |
lightning
|
| 提出日時 | 2019-05-03 21:48:16 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 66 ms / 2,000 ms |
| コード長 | 1,927 bytes |
| コンパイル時間 | 1,714 ms |
| コンパイル使用メモリ | 171,616 KB |
| 実行使用メモリ | 14,976 KB |
| 最終ジャッジ日時 | 2024-11-24 02:20:34 |
| 合計ジャッジ時間 | 3,467 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 2 |
| other | AC * 30 |
ソースコード
#include "bits/stdc++.h"
using namespace std;
#define Rep(i,n) for(int i=0;i<(int)(n);i++)
#define For(i,n1,n2) for(int i=(int)(n1);i<(int)(n2);i++)
#define REP(i,n) for(ll i=0;i<(ll)(n);i++)
#define RREP(i,n) for(ll i=((ll)(n)-1);i>=0;i--)
#define FOR(i,n1,n2) for(ll i=(ll)(n1);i<(ll)(n2);i++)
#define put(a) cout<<a<<"\n"
#define all(a) (a).begin(),(a).end()
#define SORT(a) sort((a).begin(),(a).end())
#define oorret 0
#define oor(x) [&](){try{x;} catch(const out_of_range& oor){return oorret;} return x;}()
typedef long long ll;
typedef unsigned long long ull;
typedef pair<int, int> P;
template<typename T1,typename T2> inline bool chmin(T1 &a,T2 b){if(a>b){a=b;return 1;}return 0;}
template<typename T1,typename T2> inline bool chmax(T1 &a,T2 b){if(a<b){a=b;return 1;}return 0;}
class UnionFind{
private:
vector<int> par,height,size;
public:
UnionFind(int n){
par.resize(n);
REP(i,n){
par[i] = i;
}
height.resize(n,0);
size.resize(n,1);
}
int root(int x){
if(par[x]==x){
return x;
}else{
par[x] = root(par[x]);
return par[x];
}
}
bool same(int x,int y){
return root(x)==root(y);
}
void unite(int x,int y){
x = root(x);
y = root(y);
if(x==y)return;
if(height[x]<height[y]){
par[x]=y;
size[y]+=size[x];
}else{
par[y]=x;
size[x]+=size[y];
if(height[x]==height[y])height[x]++;
}
}
int cnt(int x){
x=root(x);
return size[x];
}
};
int main(){
int n,p;
cin >> n >> p;
p--;
UnionFind uf(n);
for(int i=2;i<=n;++i){
for(int j=i*2;j<=n;j+=i){
uf.unite(i-1,j-1);
}
}
int res = 0;
REP(i,n){
if(uf.same(i,p)){
res++;
}
}
put(res);
return 0;
}
lightning