結果
| 問題 |
No.977 アリス仕掛けの摩天楼
|
| ユーザー |
hig98ingro
|
| 提出日時 | 2020-01-31 22:24:14 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
TLE
|
| 実行時間 | - |
| コード長 | 1,789 bytes |
| コンパイル時間 | 1,463 ms |
| コンパイル使用メモリ | 173,796 KB |
| 実行使用メモリ | 13,764 KB |
| 最終ジャッジ日時 | 2024-09-17 08:50:37 |
| 合計ジャッジ時間 | 5,144 ms |
|
ジャッジサーバーID (参考情報) |
judge6 / judge1 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 TLE * 1 -- * 15 |
ソースコード
#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,ll p,ll s){
//printf("%lld ", a);
if(uvv[a].size()!=2){
return -1;
}
fornum(i,0,uvv[a].size()){
ll b = uvv[a][i];
if(b==p)
continue;
if(b==s)
return 1;
ll c = bfs(b, a,s);
if(c==-1)
return -1;
return c+1;
}
return -1;
}
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;
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&&uvv[i].size()>0){
//printf("%lld\n", bfs(i, 0, i));
if(N-1!=bfs(i,-1,i))
break;
}
}
if(i==N){
printf("Bob");
}else{
printf("Alice");
}
}
return 0;
}
hig98ingro