NOI2013 樹的計數 解題報告

2022-04-29 20:51:09 字數 992 閱讀 8681

這什麼神題

考慮對bfs重新編號為1,2,3...n,然後重新搞一下dfs序

設dfs序為\(dfn_i\),dfs序第\(i\)位對應的節點為\(pos_i\)

乙個暴力是列舉bfs的分層,然後檢查合法性。

但是我們注意到乙個事情,節點\(i\)與節點\(i-1\)是否在同一層,是不是具有獨立性呢?

設\(s_i\)表示\(i\)與\(i+1\)是否在同一層,當\(s_i=1\)時,表示不在同一層。

那麼處理的話前兩個都好弄,第三個表示區間至少有乙個\(1\)(區間的\(1\)已經被2統計了)

可以直接打差分tag,來區分一下位置上是0還是0.5

code:

#include #include template void read(t &x)

const int n=2e5+10;

int n,d[n],b[n],dfn[n],pos[n],s[n];

int main()

{ read(n);

for(int x,i=1;i<=n;i++) read(x),d[x]=i;

for(int i=1;i<=n;i++) read(b[i]);

for(int i=1;i<=n;i++) dfn[i]=d[b[i]];

for(int i=1;i<=n;i++) pos[dfn[i]]=i;

++s[1],--s[2];double ans=1;

for(int i=2;i<=n;i++)

if(dfn[i-1]>dfn[i])

++s[i-1],--s[i],++ans;

for(int i=2;i<=n;i++)

if(pos[i-1]+12019.4.13

樹DP 基環樹 NOI2013 快餐店

小 t 打算在城市 c 開設一家外送快餐店。送餐到某乙個地點的時間與外賣店到該地點之間最短路徑長度是成正比的,小 t 希望快餐店的位址選在離最遠的顧客距離最近的地方。快餐店的顧客分布在城市 c 的 n 個建築中,這 n個建築通過恰好 n 條雙向道路連線起來,不存在任何兩條道路連線了相同的兩個建築。任...

BFS和DFS的性質 NOI2013 樹的計數

我們知道一棵有根樹可以進行深度優先遍歷 dfs 以及廣度優先遍歷 bfs 來生成這棵樹的 dfs 序以及 bfs 序。兩棵不同的樹的 dfs 序有可能相同,並且它們的 bfs 序也有可能相同,例如下面兩棵樹的 dfs 序都是 1 2 4 5 3,bfs 序都是 1 2 3 4 5。現給定乙個 dfs...

BZOJ3244 NOI2013樹的計數

給定一棵 n n 200000 個節點的樹的 df s bf s 序,求所有滿足要求的樹的平均深度。考慮到 bf s 序的性質,bf s 在前的點的深度一定小於等於後面的點。所以我們考慮根據 bf s 序計算答案。首先根據 bf s 序給樹上的點重編號,按 bf s 序的先後編成 1,2,n 考慮相...