[树形DP 费用流手动增广] Codeforces Gym 101190 NEERC 16 M. Mole Tunnels
来源:互联网 发布:java协程 编辑:程序博客网 时间:2024/06/05 06:34
因为这个图增广来增广去不会有负环 那么一条增广链必然是树上一条简单路径 那么考虑用树形DP找最短路增广
dls是这么说的
考虑费用流,每一次要找一条最短的增广路。
枚举LCA,然后维护一下每个子树往下走的最短路即可。
增广的时候加一下反向边。
可以直接树形dp,不需要数据结构维护。
#include<cstdio>#include<cstdlib>#include<algorithm>using namespace std;typedef long long ll;inline char nc(){ static char buf[100000],*p1=buf,*p2=buf; if (p1==p2) { p2=(p1=buf)+fread(buf,1,100000,stdin); if (p1==p2) return EOF; } return *p1++;}inline void read(int &x){ char c=nc(),b=1; for (;!(c>='0' && c<='9');c=nc()) if (c=='-') b=-1; for (x=0;c>='0' && c<='9';x=x*10+c-'0',c=nc()); x*=b;}const int N=100005;int n,m; ll Ans;int c[N],p[N];int pc[N],lc[N],rc[N];int f[N],pos[N];inline void Pushup(int x){ f[x]=1<<30,pos[x]=-1; if (c[x]) f[x]=0,pos[x]=x; if ((x<<1)<=n && f[x<<1]+(lc[x]?-1:1)<f[x]) f[x]=f[x<<1]+(lc[x]?-1:1),pos[x]=pos[x<<1]; if ((x<<1|1)<=n && f[x<<1|1]+(rc[x]?-1:1)<f[x]) f[x]=f[x<<1|1]+(rc[x]?-1:1),pos[x]=pos[x<<1|1];}int main(){ int u,v; freopen("t.in","r",stdin); freopen("t.out","w",stdout); read(n); read(m); for (int i=1;i<=n;i++) read(c[i]); for (int i=n;i;i--) Pushup(i); while (m--){ read(v); int cur=0; int lca=-1,minv=1<<30; for (int i=v;i;i>>=1){ if (f[i]+cur<minv)minv=f[i]+cur,lca=i; pc[i]?cur--:cur++; } printf("%I64d ",Ans+=minv); for (int i=v;i!=lca;i>>=1) if (pc[i])pc[i]--; elsei&1?rc[i>>1]++:lc[i>>1]++; int u=pos[lca]; c[u]--; for (int i=u;i!=lca;i>>=1) if (i&1)rc[i>>1]?rc[i>>1]--:pc[i]++; elselc[i>>1]?lc[i>>1]--:pc[i]++; for (int i=u;i;i>>=1) Pushup(i); for (int i=v;i;i>>=1) Pushup(i); } return 0;}
0 0
- [树形DP 费用流手动增广] Codeforces Gym 101190 NEERC 16 M. Mole Tunnels
- [模拟费用流] Codeforces Gym101190 NEERC2016M. Mole Tunnels
- [费用流建模] Codeforces Gym 101190 NEERC 16 D. Delight for a Cat
- bzoj 4849: [Neerc2016]Mole Tunnels 模拟费用流
- Codeforces Gym 101190 (NEERC 2016) F. Foreign Postcards (dp + 期望)
- [物理 杂题] Codeforces Gym 101190 NEERC 16 J. Jenga Boom
- [博弈论] Codeforces Gym 101190 NEERC 16 G. Game on Graph
- [杂题] Codeforces Gym 101190 NEERC 16 K. Kids Designing Kids
- [构造] Codeforces Gym 101190 NEERC 16 C. Cactus Construction
- [杂题] Codeforces Gym 101190 NEERC 16 L. List of Primes
- Codeforces Gym 101190 (NEERC 2016) A. Abbreviation
- [Trie树建图 2-SAT] Codeforces Gym 101190 NEERC 16 B. Binary Code
- [扫描线 杂题] Codeforces Gym 101190 NEERC 16 E. Expect to Wait
- [杂题 交互] Codeforces Gym 101190 NEERC 16 I. Indiana Jones and the Uniform Cave
- Codeforces Gym 101190 (NEERC 2016) J. Jenga Boom
- Codeforces Gym 101190 NEERC 2016 B. Binary Code
- 4849: [Neerc2016]Mole Tunnels
- BZOJ4849 [Neerc2016]Mole Tunnels
- 告别2016,展望2017
- 外链推广资源
- Android 完全退出当前应用程序的四种正确方法
- esayUI datagrid根据不同的选择构造不同的表头
- 基于Project的项目管理(一)编制进度计划、保存基准
- [树形DP 费用流手动增广] Codeforces Gym 101190 NEERC 16 M. Mole Tunnels
- Android热补丁之Tinker原理解析
- Lua多行注释和取消多行注释的方法
- 用百度API高仿微信定位demo
- String s2 = "abc"; 与 String s3 = new String("abc");原理解析
- 【转 】workerman 实现消息推送
- Spring MVC 表单与控制器间model对象映射的一些注意事项
- 使用 CSS 伪元素需要注意的
- 关于Android多项目依赖在Eclipse中无法关联源代码的问题解决