Description

公元3000年,地球联盟已经攻占了银河系内的N个星球,出于资金的考虑,政府仅仅在星球间建立了N-1条双向时空隧道保证任意两个星球之间互相可达。出于管理上的考虑,第i个星球的行政长官要求每个公民在一年内不得从该星球利用时空隧道次数超过Hi次(这一统计是基于离开次数统计的,如果你已经使用从该星球离开过Hi次,那么这一年内你就不能再使用时空隧道离开这个星球了)。Louis Paosen是一个星际旅行家,他希望能使用尽量多次的时空隧道,但又不希望最终被迫定居的星球条件太过恶劣。所以他希望能知道对于每个星球i,若从0号星球出发,最终以i号星球为终点,这样的星际旅行途中最多可以使用多少次时空隧道。

Input

第一行包含一个整数N。接下来的一行包含N个整数Hi,分别表示每个星球的离开次数限制。接下来N-1行每行两个整数,表示这两个星球之间有时空隧道连接。星球的编号从0开始,Louis Paosen一开始在0号星球。

Output

包含N行,每行一个整数,表示如果最终旅行结束在这个星球,最多可以使用时空隧道的次数。

Sample Input

3
2 6 2
0 1
1 2

Sample Output

8
7
8

HINT

40%的数据N≤500
100%的数据中N≤50000。
所有星球的离开次数限制满足1≤Hi≤40000,且每个星球的Hi大于等于与该星球直接相连的星球数(即度数)。

Source

Day1

【解析】

高级的树形dp解决树上网络流……

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

剩下的看代码注释吧

#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
struct node
{int x,y,next;
}a[110000];int len,last[51000];
int f,g[51000],c[51000];
void ins(int x,int y)
{len++;a[len].x=x;a[len].y=y;a[len].next=last[x];last[x]=len;
}
void dfs(int x,int fa)
{for(int k=last[x];k;k=a[k].next){int y=a[k].y;if(y!=fa){dfs(y,x);int sum=min(c[x],c[y]);//记录最小的离开次数c[x]-=sum;c[y]-=sum;//减去离开的次数f+=sum*2;//两个点来回走,使用次数是2倍if(c[y]>0) g[x]=y;//x的儿子y还有离开的次数}}
}
int ans[51000],biaoji[51000];
void solve(int x,int fa)
{ans[x]=f;for(int k=last[x];k;k=a[k].next){int y=a[k].y;if(y!=fa){//当前x的流量>0,那么可以直接走到y,使得y答案加1if(c[x]>0){c[x]--;f++;biaoji[x]=0;}//y的某个儿子u的流量>0,那可以把y->x的流量退掉,换成y->u,u->y使答案加1else if(g[y]>0){c[g[y]]--;f++;biaoji[x]=1;}//若上述情况都不存在,那y->x这条边流量必须退掉,因为到达x之后就返回不y了else {c[y]++;f--;biaoji[x]=2;}solve(y,x);if(biaoji[x]==0){c[x]++;f--;}else if(biaoji[x]==1){c[g[y]]++;f--;}else{c[y]--;f++;}}}
}
int main()
{int n,x,y;scanf("%d",&n);for(int i=1;i<=n;i++) scanf("%d",&c[i]);len=0;memset(last,0,sizeof(last));for(int i=1;i<n;i++){scanf("%d%d",&x,&y);x++;y++;ins(x,y);ins(y,x);c[x]--;c[y]--;//因为每个星球的Hi大于等于与该星球直接相连的星球数,所以至少可以遍历所有的边一个来回}f=(n-1)*2;dfs(1,0);solve(1,0);for(int i=1;i<=n;i++) printf("%d\n",ans[i]);return 0;
}

【bzoj1917】[Ctsc2010]星际旅行相关推荐

  1. Bzoj1917 [Ctsc2010]星际旅行

    Time Limit: 10 Sec  Memory Limit: 259 MB Submit: 185  Solved: 118 Description 公元3000年,地球联盟已经攻占了银河系内的 ...

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

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

  3. [CTSC2010]星际旅行

    https://www.luogu.org/problemnew/show/P4189 题解 模拟费用流. 首先有一个非常好的条件,每个点的限制次数都大于等于这个点的度数. 然后我们可以从\(0\)开 ...

  4. bzoj 1917: [Ctsc2010]星际旅行 树形dp解决树上网络流

    如果把限制看做流量上界,那么答案相当于从根节点1到树上所有点的最大流. 由于有Hi>=i的度数,那么可以想象在最坏情况下(比如所有Hi=i的度数),答案至少是根节点走过所有点之后回到根节点,然后 ...

  5. NOIP模拟测试5「星际旅行·砍树·超级树」

    星际旅行 0分 瞬间爆炸. 考试的时候觉得这个题怎么这么难, 打个dp,可以被儿子贡献,可以被父亲贡献,还有自环,叶子节点连边可以贡献,非叶子也可以贡献,自环可以跑一回,自环可以跑两回, 关键是同一子 ...

  6. CCF202009-4 星际旅行(100分题解链接)

    试题编号: 202009-4 试题名称: 星际旅行 时间限制: 1.0s 内存限制: 256.0MB 问题描述: 问题描述 在一个n维欧几里得空间的宇宙中,小 A 打算完成一次星际旅行. 利用n维直角 ...

  7. CCF202012-5 星际旅行【线段树】(100分题解链接)

    试题编号: 202012-5 试题名称: 星际旅行 时间限制: 3.0s 内存限制: 512.0MB 问题描述: 题目描述 乔帝要规划一次星际旅行,星际空间可以视为一个3维坐标系,乔帝有n(n≤1,0 ...

  8. bzoj 1921: [Ctsc2010]珠宝商

    题意: 给一棵树,每个点上有一个字母,问对于所有(x,y),求x到y的路径所组成的字符串在S中出现次数的和. 题解: 先上题解:begined CTSC2010 珠宝商新解 然后说说个人的垃圾理解. ...

  9. [CTSC2010]珠宝商(点分治+根号分治+后缀自动机)

    [CTSC2010]珠宝商 洛谷题目传送门 简要题意 给定一颗nnn个节点的树,和一个长度为mmm的模式串SSS 树上每个节点都有一个字符 求树上所有路径的点的字符拼成的字符串在SSS中的出现次数之和 ...

最新文章

  1. CAD二次开发学习笔记二(创建一个对话框)
  2. [FZSZOJ 1029] 观察者加强版
  3. align 的用法(u-boot源代码分析)
  4. Eclipse内存分析工具的用法
  5. 深入了解 Oracle Flex ASM 及其优点
  6. Android Hook神器——XPosed入门(登陆劫持演示)
  7. python中oxf2是什么_0x02-StartingPoint-Oopsie
  8. 计算机二级python考试大纲2020_【2020年9月全国计算机二级Python考试大纲】- 环球网校...
  9. carry函数在C语言中用法,CArry的使用完整版.doc
  10. java请求参数_在Java中发送http的post请求,设置请求参数等等
  11. mysql数据库导入视图表失败_一个mysqldump导出失败的案例分析
  12. MD4 算法代码实现
  13. java基于springboot的酒店预约管理平台系统
  14. 古剑奇谭3steam服务器稳定吗,国产游戏《古剑奇谭3》占据steam热销榜第一?这么好玩吗?...
  15. windows对图片进行标记处理等操作
  16. 操作系统:银行家算法的实现
  17. 联想服务器网卡显示不全,ThinkSystem系列服务器板载1Gb网口及LOM网卡接入100Mb交换机显示无连接...
  18. Java DateUtil 时间工具类
  19. 使用360加固保加固安卓APK
  20. 在apache和php安装之后进行连接配置,

热门文章

  1. 2020自考计算机应用技术,2020年8月自考02316计算机应用技术真题及答案
  2. AVPlayer(一)AVPlayerItem
  3. n个结点的无向完全图的生成树的个数
  4. leaflet加载Geoq智图,4种形式切换(示例代码033)
  5. Leaflet调用谷歌地图、天地图、智图地图、高德题图一键搞定
  6. 聚合支付PC端-支付宝(即时到账交易接口)
  7. http://www.111cn.net/jsp/Jsp-Servlet/45158.htm
  8. 7-1 | 厘米换算英尺英寸
  9. C++实现读取CSV文件数据将进行计算。
  10. JAVA使用PGP对文件签名+验签