JLOI 2012 樹(樹上倍增)

2021-08-29 18:47:31 字數 510 閱讀 2971

傳送門

solution:

考慮倍增,維護up和w陣列,up[i][j]代表i節點向上跳2^j能到達的節點,w[i][j]代表i節點及其以上2^j的和,一遍dfs,常規倍增處理即可。

特別地,w[i][0]的值不是val[father],而是val[i]

#include#define n 100005

using namespace std;

int n,s,val[n],tot,first[n],depth[n],ans;

int up[n][20],w[n][20];

struct node

edge[2*n];

inline void addedge(int x,int y)

inline void dfs(int now,int fa)

int x=now;

int remain=s;

for(int i=19;i>=0;i--)

dfs(1,0);

cout<

JLOI2012 樹 佇列和棧

給定乙個值 s 和一棵樹。在樹的每個節點有乙個正整數,問有多少條路徑的節點總和為 s。路徑中節點的深度必須是公升序的。假設節點1是根節點,根的深度是0,它的兒子節點的深度為1。路徑不必一定從根節點開始。我們可以維護這樣乙個資料結構,他的前半部分是乙個保留原來資訊的佇列 後半部分是乙個棧 dfs一遍,...

模板 樹上倍增 最大生成樹

a 國有 n 座城市,編號從 1 到 n,城市之間有 m 條雙向道路。每一條道路對車輛都有重量限制,簡稱限重。現在有 q 輛貨車在運輸貨物,司機們想知道每輛車在不超過車輛限重的情況下,最多能運多重的貨物。輸入格式 輸入檔名為 truck.in。輸入檔案第一行有兩個用乙個空格隔開的整數 n,m,表示 ...

關於樹論 LCA樹上倍增演算法

補了一發lca,表示這東西表面上好像簡單,但是細節真挺多。我學的是樹上倍增,倍增思想很有趣 爸爸的爸爸叫奶奶.偶不,爺爺 有乙個跟st表非常類似的東西,f i j 表示j的第2 i的祖先,就是說f 0 x 是父親,f 1 x 是爺爺,f 2 x 是高祖父 爺爺的爺爺 f 3 x 是遠祖父 高祖父的高...