多校1009 (DFS 樹狀陣列)

2021-05-27 00:14:53 字數 1182 閱讀 5171

暴力n^2 各種tle

#include

#include

const int maxn=100010;

struct node;};

node * list[maxn];

int min_num[maxn],deg[maxn],n,son[maxn];

int n2;

bool vis [maxn];

void dfs (int u)

if(uvoid init ()

int main ()

son[0]=0;

p--;

vis[p]=true ;

node * tp=list[p];

min_num[p]=p;

for (; tp!=null ; tp=tp->next)

for (int i=0 ; i正解演算法 用樹狀陣列

題 目 大 意 是 給 定 一 棵 樹 ,對 於 每 個 節 點 ,計 算 其 所 有 子 節 點 中 編 號 小 於 該 節 點 編 號 的 個

數 。 記 所 求 為 f[i], 根 據 樹 的 遞 歸 性 質 我 們 可 以 想 到 對 其 進 行 遞 歸 統 計 。 我 們 可 以 使 用 一 個

樹 狀 數 組 記 錄 當 前 加 入 的 節 點 。 每 當 遍 歷 到 一 個 節 點 時 ( 注 意 是 後 序 ), 便 將 該 節 點 加 入 ,

那 麼 當 我 們 遍 歷 完 以 v 為 根 的 所 有 子 樹 時 , 便 可 以 根 據 加 入 的 節 點 計 算 出 f[v ]。

這 裡 有 一 個 小 問 題 :假 設 u ,v 為 兄 弟 節 點 ,我 們 首 先 遍 歷 了 以 u 為 根 的 子 樹 ,當 我 們

遍 歷 以 v 為 根 的 子 樹 時 ,u 子 樹 的 所 有 節 點 已 經 加 入 了 ,然 而 它 們 並 不 屬 於 v 中 任 意 節 點 的

子 節 點 。 但 注 意 到 v 的 所 有 子 節 點 都 是 在 遍 歷 到 v  子 樹 之 後 才 加 入 的 , 所 以 我 們 可 以 在 遍

歷 v 節 點 的 子 節 點 之 前 記 錄 當 前 編 號 小 於 v 的 節 點 總 數 c 1 , 在 遍 歷 完 所 有 子 樹 之 後 計 算 編

號 小 於 v 的 節 點 總 數 c 2, 則 有 f[v ]= c 2-c 1 。

dfs序 樹狀陣列

the first line contains an integer n n 100,000 which is the number of the forks in the tree.output for every inquiry,output the correspond answer per ...

牛客網多校5 I vcd (樹狀陣列)

題目 有 n 個點,乙個點集 s 是好的,當且僅當對於他的每個子集 t,存在乙個右邊無限長的矩形,使得這個矩形包含了 t,但是和 s t 沒有交求這 n 個點裡有幾個好的點集 1 n 10 5 思路 對於 s 1,他顯然是好的 對於 s 2,只要兩個點的 y 座標不相同,那麼這個集合也是好的 對於 ...

牛客網多校5 H subseq (樹狀陣列)

題目 給定乙個序列 a 1.n 求下標字典序第 k 小的嚴格遞增子串行 1 n 10 5 0 k 10 18 思路 考慮逐位確定,每次大概要算 a i n 中,第一項 x 的嚴格遞增子串行的個數,這個可以用乙個可持久化線段樹或者樹狀陣列維護。include using namespace std t...