乙個博弈樹,黑方先手。定義乙個最小的葉子節點集為黑胜狀態為黑方勝利集合,白色亦然。求所有既屬於黑方勝利集合有屬於白方勝利集合的點。
設f i,
0/1f_
fi,0/1
表示i
ii子樹中的最小黑髮/白方勝利集和,然後可以根據這個求出所有的勝利集合點。
時間複雜度o(n
)o(n)
o(n)
#include
#include
#include
using
namespace std;
const
int n=
2e5+10;
struct nodea[n]
;int n,tot,ls[n]
,f[n][2
];bool con[n][2
];void
addl
(int x,
int y)
void
dfs(
int x,
int j,
int k)
if(j!=k)f[x]
[k]=
2147483647
;for
(int i=ls[x]
;i;i=a[i]
.next)
return;}
void
solve
(int x,
int j,
int k)
return;}
intmain()
dfs(1,
0,0)
;dfs(1
,0,1
);solve(1
,0,0
);solve(1
,0,1
);int ans1=
2147483647
,ans2=
0,ans3=0;
for(
int i=
1;i<=n;i++)if
(con[i][1
]&&con[i][0
])ans1=
(ans1<
2147483647
)?ans1:i,ans2++
,ans3^
=i;printf
("%d %d %d\n"
,ans1,ans2,ans3)
;}
P4107 HEOI2015 兔子與櫻花 貪心
傳送門 一道貪心題 首先我們可以證明最優的貢獻一定是從下依次合併到上的 不會出現乙個節點不能合併到父親節點,卻能合併到父親節點的祖先節點的情況 我們設當前的節點為 u u 的父親節點為 v v 的父親節點是 fa 如果 u 不能合併到 v 上,那麼必定有 c u son u 1 c v son v ...
P4111 HEOI2015 小Z的房間
你的房子可以看做是乙個包含n m個格仔的格狀矩形,每個格仔是乙個房間或者是乙個柱子。在一開始的時候,相鄰的格仔之間都有牆隔著。你想要打通一些相鄰房間的牆,使得所有房間能夠互相到達。在此過程中,你不能把房子給打穿,或者打通柱子 以及柱子旁邊的牆 同時,你不希望在房子中有小偷的時候會很難抓,所以你希望任...
P4111 HEOI2015 小Z的房間
傳送門 轉換題意後就是問你生成樹的方案數 就是裸的矩陣樹定理 不會證明,只懂結論 對於乙個無向圖 g 定義g的度數矩陣 d g 是乙個 n n 的矩陣,並且滿足 當 i j 時,d i j 0,當 i j 時,d i j 等於 vi 的度數 定義g的鄰接矩陣 a g 是乙個 n n 的矩陣,並且滿足...