蒟蒻並不會樹上差分。。。。。所以只能用樹鏈剖分套線段樹維護。。。。。
對於每條路徑,都相當於將所有經過的點+1,最後查詢最大值即可。
#includeusing namespace std;
const int maxn=5e4+10;
const int maxm=1e5+10;
int n,q,cnt;
int head[maxn],depth[maxn],siz[maxn],fa[maxn],son[maxn],top[maxn];
int nxt[maxm],to[maxm];
int dfn[maxn],ys[maxn],tot;
struct treetr[maxn<<2];
int read()
void add(int x,int y)
void dfs1(int u,int f)
}void dfs2(int u,int tp)
}void push_up(int root)
void push_now(int root,int v)
void push_down(int root)
}void build(int root,int l,int r)
void update(int root,int l,int r,int l,int r,int key)
push_up(root);
}void updatepath(int x,int y)
if(depth[x]swap(x,y);
update(1,1,n,dfn[y],dfn[x],1);
}int main()
dfs1(1,-1);
dfs2(1,1);
build(1,1,n);
while(q--)
cout
}
洛谷P3128 最大流
本題當然可以用樹剖解決,而且是樹剖的模板題。但是對於本題來說,有一種更巧妙的辦法 樹上差分 類似於普通的差分,我們對於題目中的每一條路線i j,把它拆成i lca i,j j.然後將i點 j點的權值加一,將lca i,j 的權值減二 乍看起來沒什麼毛病,但是仔細想想,對lca i,j 的子樹進行字首...
樹鏈剖分 洛谷 P3384 模板 樹鏈剖分
step1 problem 題目 給你一棵n個點樹,m個操作,r是根,結果取模mod.操作1 格式 1 x y z 表示將樹從x到y結點最短路徑上所有節點的值都加上z 操作2 格式 2 x y 表示求樹從x到y結點最短路徑上所有節點的值之和 操作3 格式 3 x z 表示將以x為根節點的子樹內所有節...
洛谷 3384 模板樹鏈剖分
如題,已知一棵包含n個結點的樹 連通且無環 每個節點上包含乙個數值,需要支援以下操作 操作1 格式 1 x y z 表示將樹從x到y結點最短路徑上所有節點的值都加上z 操作2 格式 2 x y 表示求樹從x到y結點最短路徑上所有節點的值之和 操作3 格式 3 x z 表示將以x為根節點的子樹內所有節...