https://www.luogu.org/problemnew/show/P4189

题解

模拟费用流。

首先有一个非常好的条件,每个点的限制次数都大于等于这个点的度数。

然后我们可以从\(0\)开始\(dfs\)一遍这棵树。

然后如果一条边连接的两个点的\(h\)同时\(>0\),那么就来回走。

然后我们考虑再去从\(0\)号节点往每个节点走。

如果此时\(u\)的\(h>0\),那么直接走就可以了。

如果不是这样,那么我们为了从\(u\)走到\(v\),必须将上一次\(uv\)折返的路程去掉,这样会使\(v\)的次数\(+1\),这时如果\(v\)的一个儿子的次数不为\(0\),那么还可以继续折返一次。

代码

#include<bits/stdc++.h>
#define N 50009
using namespace std;
typedef long long ll;
int head[N],tot,h[N],ans[N],now,p[N],n;
inline ll rd(){ll x=0;char c=getchar();bool f=0;while(!isdigit(c)){if(c=='-')f=1;c=getchar();}while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}return f?-x:x;
}
struct edge{int n,to;
}e[N<<1];
inline void add(int u,int v){e[++tot].n=head[u];e[tot].to=v;head[u]=tot;
}
void dfs(int u,int fa){for(int i=head[u];i;i=e[i].n)if(e[i].to!=fa){int v=e[i].to;dfs(v,u);int x=min(h[u],h[v]);now+=x*2; h[u]-=x;h[v]-=x;if(h[v])p[u]=v;}
}
void dfs2(int u,int fa){ans[u]=now;for(int i=head[u];i;i=e[i].n)if(e[i].to!=fa){int v=e[i].to;if(h[u]){h[u]--;now++;dfs2(v,u);h[u]++;now--;}else if(p[v]){h[p[v]]--;now++;dfs2(v,u);h[p[v]]++;now--; }else{h[v]++;now--;dfs2(v,u);h[p[v]]--;now++;    }}
}
int main(){n=rd();int u,v;for(int i=1;i<=n;++i)h[i]=rd();for(int i=1;i<n;++i){u=rd()+1;v=rd()+1;add(u,v);add(v,u);h[u]--;h[v]--;now+=2;}dfs(1,0);dfs2(1,0);for(int i=1;i<=n;++i)printf("%d\n",ans[i]);return 0;
}

转载于:https://www.cnblogs.com/ZH-comld/p/10794064.html

[CTSC2010]星际旅行相关推荐

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

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

  2. 【bzoj1917】[Ctsc2010]星际旅行

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

  3. Bzoj1917 [Ctsc2010]星际旅行

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

  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. android-Service和Thread的区别
  2. KBMMW 4.6 正式版发布
  3. 三、Unity中的鼠标、键盘的获取
  4. Peacock:大规模主题模型及其在腾讯业务中的应用-2015
  5. 老男孩的学生优秀博文及内部教学文章
  6. 一、SMARTY安装于配置文件
  7. Android使用Intent完成活动之间的通信
  8. elasticsearch监控平台cerebro-0.8.3 相关操作
  9. web中有关文档元素距离的几个jquery 宽度 width高度height 尺寸 属性
  10. 2020 金山云 面经
  11. enum ordinal java_Java Enum ordinal()方法
  12. 科学家首次3D生物打印出血管化肿瘤,并成功使用免疫疗法治疗
  13. Java-Tomcat的请求参数解析分析
  14. 扇贝python课程打卡_Learning by doing——百日“扇贝打卡” 历程展望
  15. 前端js,将英文字符转换大小写
  16. vue中a标签实现带header的下载
  17. html是一种通用的方法来,()是以一种完全通用的方法来设计函数或类而不必预先说明将被使用的每个对象的类型。A.模板B.类C....
  18. Go语言打造起名系统,拿去叫我雷锋
  19. 第五模块:WEB开发基础-第8章 Jquery开发BootStrap
  20. 【实战】文本驱动的StyleGAN2图像处理(二):潜码映射器(Latent Mapper)

热门文章

  1. BZOJ 1012: [JSOI2008]最大数maxnumber(线段树)
  2. 在Linux中创建静态库和动态库 (转)
  3. Vista上远程管理Hyper-V服务器
  4. Spring学习(六)bean装配详解之 【通过注解装配 Bean】【基础配置方式】
  5. 判断访问接口的设备是安卓还是ios
  6. 关于linux中的 秘钥认证 ,最清晰解读
  7. HDU——1418抱歉(平面欧拉公式)
  8. JD商家后台管理的细节
  9. zookeeper运维管理
  10. 中文信息匮乏年代,新媒体粉墨登场