結果
| 問題 |
No.977 アリス仕掛けの摩天楼
|
| ユーザー |
hig98ingro
|
| 提出日時 | 2020-01-31 22:08:20 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,599 bytes |
| コンパイル時間 | 1,613 ms |
| コンパイル使用メモリ | 172,128 KB |
| 実行使用メモリ | 11,392 KB |
| 最終ジャッジ日時 | 2024-09-17 08:25:18 |
| 合計ジャッジ時間 | 4,981 ms |
|
ジャッジサーバーID (参考情報) |
judge2 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 5 TLE * 1 -- * 20 |
ソースコード
#include<bits/stdc++.h>
#define ll long long
#define fornum(A,B,C) for(A=B;A<C;++A)
#define pii pair<int,int>
#define pll pair<ll,ll>
using namespace std;
/////////////////////////////////////////////////////
ll N;
vector<ll> uvv[101010];
ll mk[101010];
ll i, j, k,ans;
//Union木
struct UnionFind{
vector<int> nxt;
void init(int x){
nxt.clear();
nxt.resize(x);
for (int i = 0; i < x;i++){
nxt[i] = i;
}
}
int find(int x){
if(nxt[x]==x)
return x;
return nxt[x] =find(nxt[x]);
}
inline void unite(int x,int y){
nxt[find(y)] = find(x);
}
};
ll bfs(ll a){
mk[a] = 1;
ll c = 1;
fornum(i,0,uvv[a].size()){
ll b = uvv[a][i];
if(mk[b])
continue;
c += bfs(b);
}
return c;
}
int main(){
scanf("%lld", &N);
UnionFind uf;
uf.init(N);
fornum(i,1,N){
ll u, v;
scanf("%lld%lld", &u, &v);
uvv[u].push_back(v);
uvv[v].push_back(u);
uf.unite(u, v);
}
ll a = 0;
ll b = -1;
fornum(i,0,N){
if(uf.find(i)==i){
a++;
}
}
//printf("%lld %lld %lld\n",a,b, i);
if(a>2){
printf("Alice");
}else if(a==1){
printf("Bob");
}else{
fornum(i,0,N){
if(uf.find(i)==i){
ll a = bfs(i);
if(a!=N-1&&a!=1)
break;
}
}
if(i==N){
printf("Bob");
}else{
printf("Alice");
}
}
return 0;
}
hig98ingro