【6.18】Codeforces Round #801 (Div. 2) and EPIC Institute of Technology Round

Codeforces Round #801 (Div. 2) and EPIC Institute of Technology

ALL:6
AC:3
补题:2


C. Zero Path

题意:给你一个 n × m n \times m n×m ( 1 ≤ n , m ≤ 1000 1 \le n, m \le 1000 1n,m1000) 的格点图,每个格子的值要么是 − 1 -1 1,要么是 1 1 1,现在问你,是否有一条从 ( 1 , 1 ) (1, 1) (1,1) ( n , m ) (n, m) (n,m) 的路径,使得路径上经过的格点的值的和为 0 0 0。在路径中,只能向右或是向下走。

思路:首先,如果起点终点曼哈顿距离为奇数,无解。否则,维护起点到每个点的路径权值的上界和下界,如果最终点的值域包含 0 的话,有解。因为我们可以尝试微调路径,使得路径的变化量为 2 。那么值域内的与下界相差为偶数的都能达到。

AC代码:https://codeforces.com/contest/1695/submission/161088615


D1. Tree Queries (Easy Version)

D2. Tree Queries (Hard Version)

题意:给定一棵无根树,有 n ( n ≤ 2 × 1 0 5 ) n(n\leq 2\times 10^5) n(n2×105) 个顶点。在这棵树上有一个顶点 x x x ,你希望找到它。

要找到 x x x ,你可以进行 k k k 次查询 v 1 , v 2 , … , v k v_1 , v_2 ,\ldots , v_k v1,v2,vk (其中 v i v_i vi 是树中的各个顶点)。当你进行完所有查询后,你会得到 k k k 个数字 d 1 , d 2 , … , d k d_1 , d_2 ,\ldots , d_k d1,d2,dk ,( d i d_i di v i v_i vi x x x 之间的最短路径上的边数)。注意,您知道哪个距离对应于哪个查询。

请你求出最小的 k k k ,使存在这样的一些查询 v 1 , v 2 , … , v k v_1 , v_2 ,\ldots , v_k v1,v2,vk ,让你总能找到唯一的一个节点 x x x (无论 x x x 是什么)。

注意,你不需要输出这些查询。

题解:(Codeforces801Div2)D2.Tree Queries(Hard Version)(思维+贪心)

Codeforces Round #801 (Div. 2) and EPIC Institute of Technology Round A - D

思路:由题解可知必然存在最优解:查询的点全部都是叶子节点。(不知道为啥,很迷)。而且必须满足,以某个点为根时,最多只有一颗子树内没有查询点。所以我们有两解:

  1. 从每个叶子节点 dfs ,搜到分叉节点(即度大于 2)停止,如分叉节点之前未搜过,则标记为搜过;否则,答案加一。这样可以保证 n n n 棵子树有 n − 1 n-1 n1 棵有查询点。
  2. 随便钦定某度数大于 2 的点为根 dfs 跑树形 DP,公式为 f ( u ) = max ⁡ ( x − 1 , 0 ) , x = ∑ [ f ( v ) = = 0 ] f(u)=\max(x-1,0),x=\sum[f(v)==0] f(u)=max(x1,0),x=[f(v)==0]

AC代码:https://codeforces.com/contest/1695/submission/163181085

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值