【树形DP】AGC010C Cleaning

题目大意

Hellen和Shawn找到了一棵神奇的树.这棵树有n个节点,节点i有ai个石头.因为树上有石头是件奇怪的事情,两人决定将石头全部移除.Hellen觉得直接移除没有意思,所以对移除石头的操作进行了规定.
对于每次移除石头的操作,选择两个叶子节点(u,v)(u不能等于v),移除u到v路径上的每一个节点的一块石头(包括u,v).注意:如果这条路径上有一个节点没有石头,则不能进行操作.
此处的叶子节点为度数为1的节点.
Shawn想让你来告诉他, 能否通过上述操作将树上的石头移完.

解法

每个叶子结点向另一个叶子结点的连边,可拆成两条链,每一个关系在每一棵子树根统一处理。对于每一个结点x,记录一个d[x]表示该节点向上延伸的链有多少个,然后转移一下即可。

代码

#include<cstdio>
#define MAXN 100006
#include<algorithm>
#include<vector>
using namespace std;
vector<int> road[MAXN];
long long d[MAXN],a[MAXN];
int n,u,v,du[MAXN];
void DFS(int x,int father)
{
	if(du[x]==1)
	{
		d[x]=a[x];
		return;
	}
	long long sum=0,maxone=0;
	for(int i=0;i<(int)road[x].size();i++)
	{
		int nex=road[x][i];
		if(nex==father) continue;
		DFS(nex,x);
		sum+=d[nex];
		maxone=max(maxone,d[nex]);
	}
	if(a[x]>sum||a[x]*2<sum)
	{
		printf("NO");
		exit(0);
	}
	long long p=a[x]*2-sum;
	if(maxone-p>sum-maxone)
	{
		printf("NO");
		exit(0);
	}
	d[x]=p;
}
int main()
{
	//freopen("tree.in","r",stdin);
	//freopen("tree.out","w",stdout);
	scanf("%d",&n);
	for(int i=1;i<=n;i++)
		scanf("%lld",&a[i]);
	for(int i=1;i<n;i++)
	{
		scanf("%d%d",&u,&v);
		road[u].push_back(v);
		road[v].push_back(u);
		du[u]++;
		du[v]++;
	}
	for(int i=1;i<=n;i++)
		if(du[i]!=1)
		{
			DFS(i,0);
			if(d[i]) printf("NO");
			else printf("YES");
			return 0;
		}
	if(a[1]==a[2]) printf("YES");
	else printf("NO");
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: s5700是华为公司生产的一系列高性能以太网交换机的型号。v200r010c00spc600则是该交换机的软件版本号。 s5700交换机系列是为企业和数据中心设计的高性能以太网交换设备。它们具有强大的功能和灵活性,适用于各种网络环境。 v200r010c00spc600是s5700交换机的软件版本号。这个版本的软件提供了一系列功能和改进,以提高交换机的性能和可靠性。它可能包括bug修复、安全增强、性能优化、新功能添加等。 通过升级到v200r010c00spc600,企业和数据中心可以获得更好的网络性能和安全性。这可以提高网络的稳定性和可靠性,并为企业的业务活动提供更好的支持。此外,软件版本升级还提供了更好的管理和配置选项,帮助网络管理员更好地管理和运维网络设备。 总之,s5700 v200r010c00spc600是华为s5700交换机的软件版本号,通过升级到这个版本,用户可以获得更好的性能、安全性和管理功能,提升网络的效率和可靠性。 ### 回答2: S5700是华为公司推出的一款企业级以太网交换机系列。其中的V200R010C00SPC600是该系列交换机的软件版本号。 这个软件版本号的意思是: - V200R010表示该软件版本为V200R010版,它是这个系列交换机的第一版软件。 - C00表示这个软件版本是华为公司原始交付的正式版本,没有任何修改。 - SPC600表示这个软件版本包含了SPC600的功能模块。 SPC600是华为公司开发的一种交换机性能控制器,它被用于优化交换机的性能和稳定性。 这个软件版本号的含义告诉我们,S5700交换机使用的是V200R010版的软件,这个软件版本是华为公司提供的正式版本,并且集成了SPC600功能模块。 根据软件版本号,我们可以判断交换机的性能和功能,以及是否需要升级软件来获得更好的性能和稳定性。同时,也可以参考软件版本号来了解交换机的兼容性和支持的特性,以便在使用和维护过程中进行相应的配置和操作。 总之,软件版本号是对交换机软件特性和性能的标识,它对交换机的使用和维护有着重要的指导作用。 ### 回答3: s5700 v200r010c00spc600是华为公司推出的一款网络交换机型号。它采用了最新的网络技术,为企业提供高效、稳定的网络连接。该型号具备多个端口,可以连接多台计算机、服务器和其他网络设备。同时,它还支持VLAN功能,可以将网络划分为不同的虚拟局域网,提高网络安全性。此外,s5700 v200r010c00spc600还支持QoS功能,可以对网络流量进行管理和优化,确保重要的数据传输的稳定性和优先级。它还支持多种网络协议,如STP和RSTP等,提供灵活的网络拓扑结构和冗余备份机制。此外,该型号还支持远程管理和监控,管理员可以通过web界面或命令行界面对设备进行配置和监控,大大简化了管理操作。总之,s5700 v200r010c00spc600是一款功能强大,性能优越的网络交换机,适用于中小型企业和大型企业的局域网建设。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值