[BZOJ4390][Usaco2015 dec]Max Flow(树上差分+lca)
2016-08-25 17:11
513 查看
题目描述
传送门题解
某人用链剖水掉了,不过还有另外的思路时间完爆树链剖分。对于每一次修改s,t,将s,t的权+1,将lca(s,t)和father[lca(s,t)]的权-1,一个点最终的答案就是这个点的子树权和。
本质上是差分。
代码
#include<iostream> #include<cstring> #include<cstdio> using namespace std; #define N 50005 #define sz 16 int n,k,x,y,s,t,r,ans; int tot,point ,nxt[N*2],v[N*2]; int h ,father ,sum ,size ,f [sz+5]; inline void addedge(int x,int y) { ++tot; nxt[tot]=point[x]; point[x]=tot; v[tot]=y; ++tot; nxt[tot]=point[y]; point[y]=tot; v[tot]=x; } inline void build(int x,int fa,int dep) { h[x]=dep; father[x]=fa; for (int i=1;i<sz;++i) f[x][i]=f[f[x][i-1]][i-1]; for (int i=point[x];i;i=nxt[i]) if (v[i]!=fa) { f[v[i]][0]=x; build(v[i],x,dep+1); } } inline int lca(int x,int y) { if (h[x]<h[y]) swap(x,y); for (int i=sz-1;i>=0;--i) while (h[f[x][i]]>=h[y]) x=f[x][i]; if (x==y) return x; for (int i=sz-1;i>=0;--i) if (f[x][i]!=f[y][i]) x=f[x][i],y=f[y][i]; return f[x][0]; } inline void dfs(int x,int fa) { size[x]=sum[x]; for (int i=point[x];i;i=nxt[i]) if (v[i]!=fa) { dfs(v[i],x); size[x]+=size[v[i]]; } ans=max(ans,size[x]); } int main() { scanf("%d%d",&n,&k); for (int i=1;i<n;++i) { scanf("%d%d",&x,&y); addedge(x,y); } build(1,0,1); for (int i=1;i<=k;++i) { scanf("%d%d",&s,&t); r=lca(s,t); sum[s]++,sum[t]++,sum[r]--; if (r!=1) sum[father[r]]--; } dfs(1,0); printf("%d\n",ans); }
相关文章推荐
- bzoj4390: [Usaco2015 dec]Max Flow(LCA+树上差分)
- BZOJ 4390: [Usaco2015 dec]Max Flow 树链剖分/树上差分
- 【bzoj 4390】 [Usaco2015 dec]Max Flow(树上差分)
- 【BZOJ】4390 [Usaco2015 dec]Max Flow LCA+树上差分
- bzoj4390【Usaco2015 Dec】Max Flow
- BZOJ 4390: [Usaco2015 dec]Max Flow
- bzoj4390: [Usaco2015 dec]Max Flow
- 【bzoj4390】[Usaco2015 dec]Max Flow
- bzoj 4390: [Usaco2015 dec]Max Flow(树链剖分+手写栈)
- BZOJ 4390: [Usaco2015 dec]Max Flow
- BZOJ 4390: [Usaco2015 dec]Max Flow|树链剖分
- bzoj4326【2015提高】运输计划(二分答案+lca+树上差分前缀和)
- bzoj4326 & UOJ150【NOIP2015】运输计划 ( 树上差分 + lca )
- 【BZOJ】4326 NOIP2015 运输计划 二分+LCA+树上差分
- 【bzoj4390】[Usaco2015 dec]Max Flow LCA
- NOIP2015 运输计划 (树链剖分,LCA,树上差分)
- bzoj 1731: [Usaco2005 dec]Layout 排队布局【差分约束】
- 【BZOJ 3631】松鼠的新家 【LCA+树上差分】
- bzoj 3631: [JLOI2014]松鼠的新家(LCA+树上差分)
- bzoj 4326: NOIP2015 运输计划【树链剖分+二分+树上差分】