20150324-2

d.

题目类型:状态压缩,最短路

题目大意:给出一个图n个点、m条边以及每条边的权。Money有一个初始值。在图上需要遍历p个节点,到达Ui(1<=i<=p)时,先Money减少Di,然后增加Ci。任何Money不能为负。从U1出发,最后要回到U1.(U1可能是p个点中的,也可能不是),问能否完成遍历。

题目解法:

dp[u][p1][p2]...[pu]...[pn] = min(dp[i][p1][p2]...[pi - 1]...[pn] + dis(i, u)),i为当前所在的必经节点,p1 ~ pn为pi是否遍历过的bool值,因为 p <= 15,p1 ~ pn压缩进1 ~ 2 ^ 15的二进制整数,状态为dp[u][v] = min(dp[i][j & (1 << i) == 0 ? j - (1 << i) : j] + dis(i, u)),然后跑最短路。

注意细节:

由于short的范围是[- 2 ^ 15, 2 ^ 15 - 1]表示V的值并不能用short而要用int。


e.

题目类型:树的点分治

题目大意:给出一个树,求有多少条不相交的路径。

题目解法:

枚举一个路径的中垂点u,中垂点的定义是离另一条路径的最近点,然后计算从这点出发的路径数,N * (N - 1) * (N * (N - 1) - 1) - f(root); f(u) = [v] + [v]  * f(v),(u, v) ∈ E;重路径对数减去相交路径对数。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值