\(\mathcal{Description}\)

  Link.

  给定一棵 \(n\) 个点的无根树,点有点权,每次选择两个不同的叶子,使它们间的简单路径的所有点权 \(-1\),问能否将所有点权变成 \(0\)。

  \(n\le10^5\)。

\(\mathcal{Solution}\)

  这不就是我那道题的削弱版么 www。

  考虑叶子 \(u\),显然有 \(val_u\) 条路径经过 \(u\)。DFS 回溯时考虑合并儿子们的路径。假设儿子们向上的路径共 \(s\) 条,单个儿子向上路径最多有 \(m\) 条;我们拿 \(a\) 对路径在当前结点 \(u\) 处匹配成完整路径,剩下 \(b\) 条继续向上,那么有:

\[\begin{cases}
a+b=val_u\\
2a+b=s\\
a\le\min\{\lfloor\frac{s}2\rfloor,s-m\}
\end{cases}
\]

  解出 \(a,b\),判断是否合法即可。

\(\mathcal{Code}\)

#include <cstdio>
#include <cstdlib>
#include <iostream> typedef long long LL; const int MAXN = 1e5;
int n, ecnt, val[MAXN + 5], head[MAXN + 5], d[MAXN + 5]; struct Edge { int to, nxt; } graph[MAXN * 2 + 5]; inline void link ( const int s, const int t ) {
graph[++ ecnt] = { t, head[s] };
head[s] = ecnt;
} inline int DFS ( const int u, const int f ) {
if ( d[u] == 1 ) return val[u];
LL sum = 0; int mx = 0;
for ( int i = head[u], v; i; i = graph[i].nxt ) {
if ( ( v = graph[i].to ) ^ f ) {
int up = DFS ( v, u );
sum += up, mx = std::max ( mx, up );
}
}
if ( sum - val[u] > std::min ( sum >> 1, sum - mx )
|| 2 * val[u] < sum || sum < val[u] ) puts ( "NO" ), exit ( 0 );
return 2 * val[u] - sum;
// a+b=val, 2a+b=sum, a<=min{sum/2,sum-mx}
} int main () {
scanf ( "%d", &n );
for ( int i = 1; i <= n; ++ i ) scanf ( "%d", &val[i] );
for ( int i = 1, u, v; i < n; ++ i ) {
scanf ( "%d %d", &u, &v ), ++ d[u], ++ d[v];
link ( u, v ), link ( v, u );
}
if ( n == 2 ) return puts ( val[1] == val[2] ? "YES" : "NO" ), 0;
for ( int i = 1; i <= n; ++ i ) if ( d[i] > 1 ) return puts ( DFS ( i, 0 ) ? "NO" : "YES" ), 0;
return 0;
}

最新文章

  1. Xcode计算缓存文件大小和清除缓存
  2. WCF Security(转载)
  3. linux 匹配字符串是否为数字
  4. CentOS 6.5部署安装Memcached
  5. Nginx集群(转)
  6. httpclient 302 重定向
  7. Python什么是二次开发的意义?python在.net项目采用
  8. js中callback.call()和callback()的区别
  9. Python+PyCharm的一些基本设置:安装使用、注册码、显示行号、字体大小和快捷键等常用设置
  10. 指令-arModal-点击提示框模板
  11. Unity3D学习(八):《Unity Shader入门精要》——透明效果
  12. 第十一节:WebApi的版本管理的几种方式
  13. mybatis 中使用 in 查询
  14. JPA、Hibernate框架、通用mapper之间的关系及通用mapper的具体实现
  15. Openvswitch手册(1): 架构,SSL, Manager, Bridge
  16. 基于esp32的IIC通讯
  17. PAT A1017 Queueing at Bank (25 分)——队列
  18. memcache的简单使用示例
  19. 机器学习笔记 1 LMS和梯度下降(批梯度下降) 20170617
  20. MySql常用函数 --MySql

热门文章

  1. Linux中安装java JDK
  2. 安装Cacti-plugin
  3. 深入理解MySQL索引底层数据结构
  4. MINItest软件架构总结
  5. Hello world.java
  6. R语言服务器程序 Rserve详解
  7. 《剑指offer》刷题目录
  8. 使用Xamarin开发移动应用示例——数独游戏(一)项目的创建与调试
  9. 一种Django多租户解决方案
  10. Tomcat-默认访问的工程和默认访问的资源