結果
| 問題 |
No.977 アリス仕掛けの摩天楼
|
| ユーザー |
|
| 提出日時 | 2020-05-06 12:23:41 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 24 ms / 2,000 ms |
| コード長 | 1,715 bytes |
| コンパイル時間 | 915 ms |
| コンパイル使用メモリ | 96,220 KB |
| 実行使用メモリ | 5,376 KB |
| 最終ジャッジ日時 | 2024-06-28 13:09:15 |
| 合計ジャッジ時間 | 2,767 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 26 |
ソースコード
#include <iostream>
#include <iomanip>
#include <cstdio>
#include <queue>
#include <cstring>
#include <vector>
#include <map>
#include <algorithm>
#include <cctype>
#include <cmath>
#include <bitset>
#include <set>
using namespace std;
#define REP(i,n) for(int i=0;i<(int)(n);i++)
#define RREP(i,n) for(int i=n-1;i>=0;i--)
#define FOR(i,k,n) for(int i=(k);i<(int)(n);i++)
#define all(i,n) (i),(i+n)
int dx4[4]={1,0,-1,0};
int dy4[4]={0,-1,0,1};
int dx8[8]={1,0,-1,1,-1,1,0,-1};
int dy8[8]={1,1,1,0,0,-1,-1,-1};
typedef pair<int, int> P;
typedef pair<string, int> SP;
typedef long long ll;
typedef pair<ll, ll> PLL;
const int INF = 1e9;
const ll LLINF = 1e18;
const int MAX_V = 1e6+1;
const ll mod = 1000000007;
// --------------------------------------
class UnionFind {
public:
vector<int> data;
vector<int> edge;
UnionFind(int size) : data(size, -1), edge(size, 0) {};
int find(int x) {
return data[x] < 0 ? x : data[x] = find(data[x]);
}
void unite(int x, int y) {
x = find(x);
y = find(y);
if(x != y) {
if(data[y] < data[x]) swap(x, y);
data[x] += data[y];
data[y] = x;
edge[x] += edge[y] + 1;
} else {
edge[x] += 1;
}
}
int size(int x) {
return -data[find(x)];
}
};
int n;
int edge_count[100005];
bool check() {
bool f = true;
REP(i, n) {
if(edge_count[i] != 0 && edge_count[i] != 2) f = false;
}
return f;
}
int main() {
cin.tie(0);
ios::sync_with_stdio(false);
cin >> n;
UnionFind uf(n);
REP(i, n - 1) {
int a, b;
cin >> a >> b;
edge_count[a]++;
edge_count[b]++;
uf.unite(a, b);
}
cout << (uf.size(0) == n || (uf.size(0) == n - 1 && check()) ? "Bob" : "Alice") << endl;
}