JZOJ 5391. 【NOIP2017提高A组模拟9.26】卡常题

Description

ρ有一个二分连通无向图,X 方点、Y 方点均为n个(编号为1 ~ n)。
这个二分图比较特殊,每一个Y 方点的度为2,一条黑色边,一条白色边。
所有黑色边权值均为a ,所有白色边权值均为b 。
选择一个X 方点,代价为连接的所有边的权值之和。
激活一个Y 方点,需要选择至少一个与之相邻的X 方点。
现在,ρ想激活每个Y 方点,他想知道最小的总代价。
不过ρ很善良,他给你开了O2 优化。
这样你就不会被卡常了。
当然,除非你真的连读入优化都不想写,或者常数真的丑死。

Solution

对于每一个读入x,y,x和y连一条边,表示这条边的其中一个端点必选。
问题求能让所有边的其中一个端点被选的最小代价。
如果所连的图是一棵树,那么可以设 f[i][0/1] 表示以i为根的子树,其中第i个点不选/选的最小代价。
转移:
f[i][0]=Σjson[i]f[j][1]
f[i][1]=Σjson[i]min(f[j][0],f[j][1])
问题是这是个环套树。
怎么办?
我们随便在环上找到一条边,把它断开,分别以边的两个端点做一次树形dp。最后取较小值即可。
为什么这样做是对的?
被断开的这条边只需要选其中一个点,那么看选哪个点更优呗。

这题为卡常题,时限强制500ms.
怎么办?开人工栈。在OJ的测试跑还是688ms,交上去就四百多毫秒。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值