如果把限制看做流量上界,那么答案相当于从根节点1到树上所有点的最大流。

由于有Hi>=i的度数,那么可以想象在最坏情况下(比如所有Hi=i的度数),答案至少是根节点走过所有点之后回到根节点,然后去掉一个点i到根节点的那些路径。

那么可以想象答案大概就是根节点回到根节点的最大流量,这样做完以后就不存在某一对点(x,y),使得x<-->y一条边,同时x,y的可出发次数都>0。然后一路下去看能不能加,或者要去掉一些流量,那么有三种情况(假设现在从x->y,当前流量为f):

1.还可以从x出发,那么f+1,同时从可x出发的次数-1;

2.y而儿子中存在一个点p的可出发次数>0,那么可以让y->x的流量-1,然后y->p流量+1,p->y流量+1,p的可出发次数-1;

3.否则没有办法到达y,那么只能让y->x的边退流,同时y的可出发次数+1。

AC代码如下:

#include<iostream>
#include<cstdio>
#define N 50005
using namespace std;int n,f,tot,mrk[N],c[N],fst[N],pnt[N<<1],nxt[N<<1],ans[N],g[N];
void add(int x,int y){pnt[++tot]=y; nxt[tot]=fst[x]; fst[x]=tot; c[y]--;
}
void dfs(int x,int fa){int p;for (p=fst[x]; p; p=nxt[p]){int y=pnt[p];if (y!=fa){dfs(y,x);int tmp=min(c[x],c[y]);c[x]-=tmp; c[y]-=tmp; f+=tmp<<1;if (c[y]) g[x]=y;}}
}
void solve(int x,int fa){int p; ans[x]=f;for (p=fst[x]; p; p=nxt[p]){int y=pnt[p];if (y!=fa){if (c[x]){ c[x]--; f++; mrk[x]=0; }else if (g[y]){ c[g[y]]--; f++; mrk[x]=1; }else{ c[y]++; f--; mrk[x]=2; }solve(y,x);if (!mrk[x]){ c[x]++; f--; }else if (mrk[x]==1){ c[g[y]]++; f--; }else{ c[y]--; f++; }}}
}
int main(){scanf("%d",&n); int i,x,y;for (i=1; i<=n; i++) scanf("%d",&c[i]);for (i=1; i<n; i++){scanf("%d%d",&x,&y); x++; y++;add(x,y); add(y,x);}f=(n-1)<<1; dfs(1,0); solve(1,0);for (i=1; i<=n; i++) printf("%d\n",ans[i]);return 0;
}

by lych

2016.4.5

bzoj 1917: [Ctsc2010]星际旅行 树形dp解决树上网络流相关推荐

  1. BZOJ 2133 切割(树形DP,树上背包)大概是本题全网第一篇题解 >_<【BZOJ 修复工程】

    整理的算法模板合集: ACM模板 点我看算法全家桶系列!!! 实际上是一个全新的精炼模板整合计划 BZOJ 2133 切割这道题全网搜不到任何一篇题解 >_< 看评测记录也没有几个人AC- ...

  2. bzoj 1917: [Ctsc2010]星际旅行

    Description 公元3000年,地球联盟已经攻占了银河系内的N个星球,出于资金的考虑,政府仅仅在星球间建立了N-1条双向时空隧道保证任意两个星球之间互相可达.出于管理上的考虑,第i个星球的行政 ...

  3. [XSY] 绿色(圆方树、树形DP、树上差分)

    绿色 题意简述 题解 首先,每次修改完点权后,重新考虑一遍所有路径显然是不现实的,所以我们考虑求出经过每个点的两端同色的简单路径数,这样权值和容易统计和修改. 接下来分析仙人掌上的简单路径性质.一条简 ...

  4. 洛谷:P4516 [JSOI2018] 潜入行动(树形dp、树上分组背包统计方案数)

    潜入行动 题意: 在树上每个点可以放置监控设备,监控该点周围的点(不包括该点),问刚好放置 k 个监控设备监控使得整棵树所有点都被监控的方案数是多少. 思路: 显然是个树形dp,k个监控自然联想分组背 ...

  5. bzoj 4455: [Zjoi2016]小星星 树形dp+容斥原理

    题意 给出一棵树和一个图,问有多少种方法把树的节点标号使得其在改图中至少有一棵生成树与原来的树是重构的. n<=17 分析 想到了容斥,但是没想到从哪里容斥... 显然题目给了两个限制,一个是原 ...

  6. BZOJ 1040 ZJOI2008 骑士 树形DP

    题目大意:给定一个基环树林,每一个点上有权值,要求选择一个权值和最大的点集,要求点集中的随意两个点之间不能直接相连 最大点独立集--考虑到n<=100W,网络流铁定跑不了,于是我们考虑树形DP ...

  7. bzoj 3743 [Coci2015]Kamp——树形dp+换根

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=3743 树形dp+换根. "从根出发又回到根" 减去 "mx & ...

  8. bzoj 4455 [Zjoi2016]小星星 树形dp容斥

    4455: [Zjoi2016]小星星 Time Limit: 10 Sec  Memory Limit: 512 MB Submit: 643  Solved: 391 [Submit][Statu ...

  9. bzoj 1040: [ZJOI2008]骑士 树形dp

    题目链接 1040: [ZJOI2008]骑士 Time Limit: 10 Sec  Memory Limit: 162 MB Submit: 3054  Solved: 1162 [Submit] ...

最新文章

  1. pandas set_index 与 reset_index
  2. 【Paper】2013_Autonomous Cooperation Between UAV and UGV to Improve Navigation and Environmental
  3. ADO Execute 方法
  4. 计算机在生命科学中的发展前景,往生命科学领域发展的职业前景
  5. Navicat for MySQL 设置定时任务
  6. Visual Studio SnippetDesigner使用
  7. linux初始化TCP服务失败,深入Linux系统追踪TCP初始化
  8. 将一个字段的多个记录值合在一行
  9. 【leetcode】1041. Robot Bounded In Circle
  10. mount 开机自动挂载
  11. lcd1602c语言程序分析,51单片机驱动LCD1602程序设计(C语言).doc
  12. linux可变剪切分析,SpliceR:一个用RNA-Seq数据进行可变剪接分类和预测潜在编码区域的R包...
  13. 2020,好看视频的创作生态棋局
  14. 两个RGBA四通道颜色的叠加计算方法与代码实现
  15. Js验证身份证是否正确
  16. MaxEnt分析流程和推荐的分析内容
  17. MOSFET管(MOS管)基础
  18. 取得高等学校教师资格证应当具备什么学历要求
  19. Opensource.com的领导层和社区是什么样的
  20. SVM对于高斯核函数的理解

热门文章

  1. Wanna Cry病毒之后,那些值得我们注意的事实和真相
  2. 环境温湿度监控系统(51+DHT11+1602液晶)
  3. 覆盖率选项,覆盖率分析
  4. 南核目录2020pdf_最新版CSSCI来源期刊目录及增减变化!
  5. 数据结构课程设计---赛事统计,校园导航,算术表达式
  6. mysql 1126报错 User 'root' has exceeded the 'max_questions' resource (current value: 10000)
  7. 传参时 const string 相对 const string 有哪些优势?
  8. 利用RealProxy,强化AOP,在”牛粪“的周围插上”鲜花“
  9. 大热片《寻梦环游记》到底在讲什么
  10. CSDN《IT人才成长路线图》重磅开源!60+专家,13个技术领域,绘出35张图谱