傳送門
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 是遠祖父 高祖父的高...