Try   HackMD

CSES Chess Tournament 題解與證明

演算法

不斷選取目前度數最大的點

S,假設度數為
s
,與除了
S
以外度數前
s
大的人建邊,並繼續做下去直到所有人的度數都為
0
,代表可以成功建圖。若演算法執行過程中發現有某個
S
無法和度數前
s
大的人建邊(例如:剩下的人不夠多),代表這不是合法的度序列。

正確性證明

假設

A={s,t1,t2,,ts,d1,d2,,dn} 是一個非嚴格遞減的序列,
A={t11,t21,ts1,d1,d2,dn}
是一個度序列。

A 來說可以對應到一個圖
G
有點集
{S,T1,T2,,Ts,D1,D2,,Dn}
,但我們尚不知道
S
與其他點的相鄰情況,假設目前有兩種情況:

Case 1

S
T1,T2,,Ts
相鄰。此時將
G
刪去
S
的新圖度序列就是
A
。若
A
可以構成簡單圖,則
A
顯然也能構成簡單圖。

Case 2

S 至少與
Dx(1xn)
其中一個點相連,這代表存在一個
Ty(1ys)
使得
S
Tx
不相鄰。根據前提我們可知
tydx
,我們再分兩個情況討論:

Case 2-1

ty=dx。我們可以將
Ty
Dx
交換,這樣不會使得
A
改變。

Case 2-2

ty>dx。這代表存在一個點
W
使得
W
Ty
相鄰,但
W
Dx
不相鄰。這樣我們可以把邊
SDx
WTy
刪除,加上邊
STy
WDx
,這樣不會使得
A
改變。

由上可知

S 只要與任何一個非
T1,T2,Ts
的點相鄰,則我們總有一個交換的方法使得讓
S
多和
T1,T2,Ts
其中一點相鄰,會到 Case 1。最終,
A
是否為合法度序列就由
A
決定,可以遞迴下去地做。