結果
| 問題 |
No.977 アリス仕掛けの摩天楼
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2022-06-18 17:18:24 |
| 言語 | Python3 (3.13.1 + numpy 2.2.1 + scipy 1.14.1) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,161 bytes |
| コンパイル時間 | 403 ms |
| コンパイル使用メモリ | 12,800 KB |
| 実行使用メモリ | 28,160 KB |
| 最終ジャッジ日時 | 2024-10-10 07:52:27 |
| 合計ジャッジ時間 | 6,255 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 24 WA * 2 |
ソースコード
class UnionFind:
# 初期化 nは要素数
def __init__(self,n):
# 全体の大きさ
self.n=n
# -x:グループのサイズ(自身が根),k(正):根がk
self.parent_size=[-1]*n
# 要素の根を返す
def leader(self,a):
# aが根ならa自身を返す
if self.parent_size[a]<0: return a
# aが根でないなら根に向かって木をたどる+根の更新
self.parent_size[a]=self.leader(self.parent_size[a])
# 根を返す
return self.parent_size[a]
# aとbを結合
def merge(self,a,b):
# a,bの根をx,yへ
x,y=self.leader(a),self.leader(b)
# 根が同じなら終了
if x == y: return
# グループのサイズ=要素数を比較 サイズの小さい方を大きい方につなげるため
# x<yならばx,yを入れ替える
if abs(self.parent_size[x])<abs(self.parent_size[y]):x,y=y,x
# サイズの更新:小さい方のサイズを大きい方のサイズに足す
self.parent_size[x] += self.parent_size[y]
# サイズが小さい方の根を大きい方の根につなげる
self.parent_size[y]=x
return
# 同じグループか判定 同じならTrue
def same(self,a,b):
# 根を比較して同じならTrue
return self.leader(a) == self.leader(b)
# 属するグループのサイズを返す
def size(self,a):
# 根の絶対値=サイズ
return abs(self.parent_size[self.leader(a)])
# groupの全体を返す
def groups(self):
# グループの格納リストを作る
result=[[] for _ in range(self.n)]
# リストの生成
for i in range(self.n):
result[self.leader(i)].append(i)
# 空の要素を消す
return [r for r in result if r != []]
N = int(input())
Uni=UnionFind(N+1)
connct = [[] for _ in range(N)]
for i in range(N-1):
u,v = list(map(int, input().split()))
Uni.merge(u,v)
connct[u].append(v)
connct[v].append(u)
if Uni.size(0)==N:
print("Bob")
exit()
else:
print("Alice")