洛谷3128 最大流(樹鏈剖分)

2021-08-30 17:21:39 字數 954 閱讀 8307

蒟蒻並不會樹上差分。。。。。所以只能用樹鏈剖分套線段樹維護。。。。。

對於每條路徑,都相當於將所有經過的點+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為根節點的子樹內所有節...