結果
問題 | No.977 アリス仕掛けの摩天楼 |
ユーザー |
![]() |
提出日時 | 2020-01-31 21:24:09 |
言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 56 ms / 2,000 ms |
コード長 | 1,669 bytes |
コンパイル時間 | 889 ms |
コンパイル使用メモリ | 92,220 KB |
実行使用メモリ | 5,376 KB |
最終ジャッジ日時 | 2024-09-17 07:03:58 |
合計ジャッジ時間 | 2,641 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 26 |
ソースコード
#ifndef CLASS_DISJOINT_SET#define CLASS_DISJOINT_SET#include <vector>#include <cstdint>#include <algorithm>class disjoint_set {private:typedef std::int32_t value_type;std::size_t n;std::vector<value_type> val;public:disjoint_set() : n(0) {};disjoint_set(std::size_t n_) : n(n_), val(std::vector<value_type>(n_, value_type(-1))) {};std::size_t size() const { return n; }std::size_t size(std::size_t elem) { return std::size_t(-val[root(elem)]); }std::size_t root(std::size_t elem) {// path halvingwhile (val[elem] >= 0 && val[val[elem]] >= 0) {val[elem] = val[val[elem]];elem = val[elem];}return std::size_t(val[elem] >= 0 ? val[elem] : elem);}void link(std::size_t elemx, std::size_t elemy) {elemx = root(elemx);elemy = root(elemy);if (elemx == elemy) return;if (val[elemx] > val[elemy]) {std::swap(elemx, elemy);}val[elemx] += val[elemy];val[elemy] = elemx;}bool connected(std::size_t elemx, std::size_t elemy) {return root(elemx) == root(elemy);}};#endif // CLASS_DISJOINT_SET#include <set>#include <cmath>#include <string>#include <vector>#include <iostream>#include <algorithm>#include <functional>using namespace std;int main() {int N;cin >> N;disjoint_set uf(N);vector<int> deg(N);for (int i = 0; i < N - 1; ++i) {int a, b;cin >> a >> b;uf.link(a, b);++deg[a]; ++deg[b];}set<int> s;for (int i = 0; i < N; ++i) {s.insert(uf.root(i));}sort(deg.begin(), deg.end());vector<int> tar(N, 2); tar[0] = 0;if (s.size() == 1 || (s.size() == 2 && tar == deg)) {cout << "Bob" << endl;}else {cout << "Alice" << endl;}return 0;}