Day 11 20模擬賽遊記

2022-07-09 05:12:10 字數 906 閱讀 5470

沒寫出的題就寫寫知識點吧:

題目大意:一棵樹,對於每乙個\(i\),求有多少個\(j\)為\(i\)的聯絡節點,\(j\)滿足\(\forall k(j都是\(j\)的子孫節點。

題目挺簡單,但考場上完全想錯方向,對於\(j\)的右邊最多可以作為那些\(i\)的聯絡節點,易證這些\(i\)一定是連續的,而且緊挨著\(j\),因為一旦有乙個不是\(j\)的子孫節點,後面的就都不會是\(j\)的聯絡節點了。所以我們就可以二分這個右端點,用\(dfs\)序或許是乙個不錯的選擇。

眾所周知,只要\(i\)滿足\(dfn_j\le dfn_i\le dfn_j+size_j-1\),\(i\)就在\(j\)的子樹內,所以用\(st\)表維護乙個\(dfn\)的最大值和最小值,卡卡常就可以\(o(nlogn)\)解決此題。

#include#define re register

using namespace std;

const int n=2200005;

inline int read()

void print(int x)

inline int min(int x,int y)

struct edgee[n];

int n,cnt,hd[n],dfn[n],siz[n],tot,mi[n][22],ma[n][22],sum[n];

inline void add(int u,int v)

void first(int u)

return ;

}int main()

for(re int i=1;i<=n;i++) sum[i]+=sum[i-1];

for(re int i=1;i<=n;i++) print(sum[i]),putchar('\n');

return 0;

}

校內模擬賽遊記

t1 兩眼題好評。看了一眼題,心想這不是秒切,然後寫完了交上去發現題意理解有問題。樣例非常良心的暴露了我的問題,小改一下就過了。第一眼看覺得什麼玩意。因為腦抽了時間複雜度想成 o n 2 了,直接打表素數判斷,發現打表的應用實現上有困難,就棄掉了這個想法 當時真的nt,打表有問題篩一下質數打暴力也可...

2021 7 21 校內模擬賽遊記

為什麼想了那麼久的 t2 都不會啊 yiw 定義 f n 在 n 10 時結果是 n 否則設 d n 是 n 在十進位制下各位數的和,求 x in l,r f x a 的個數。看到題目發現所有的 f x 都可以化成 f d n 於是就準備寫數字 dp 了,可是想起以前寫數字 dp 寫掛的悲慘遭遇,就...

CSP J2019模擬賽1遊記

由於第一次接觸noiinux系統所以連怎麼建資料夾,調字型,如何編譯都不知道,考試的前半小時全在摸索這些。等大概會用了就只剩下70min了。感覺要爆零。我當時很著急t1 我用了個數學 theta 1 方法做了,但樣例太水了,怕錯 我當時哪有時間對拍 就寫了乙個70分 theta nlogn 暴力兜底...