竞赛讨论区 > 【每日一题】4月3日题目精讲 DFS
头像
王清楚
编辑于 2020-04-03 12:15
+ 关注

【每日一题】4月3日题目精讲 DFS

题号 NC13886
名称 Shortest Path
来源 西南交通大学第十三届ACM决赛
戳我进入往期每日一题汇总贴~

简单说一下汉语题意:

给你一棵 个节点的树(保证 是偶数),你需要将 个节点分为 个点对,使得每个点对的两个点的距离的和最小。

首先我们可以通过观察得到以下几点:

首先,在最短的距离和之中一条边一定不会被覆盖两次,如图,我们一定可以找到一种方法来交换配对,把重复的边去掉(其他的边是不会变的)。也就是说对于一条边来说,其实只有选和不选两种可能。

图片说明

第二,对于一个点x,它子树中的点一定会尽量在子树中找到匹配的点内部消化掉(要么连父亲要么连兄弟),只有根是有可能会往上找一个点来匹配(不然又会出现重复覆盖一条边的情况)。

那么如果我们不去想点怎么两两配对而是来考虑每个边选不选——对于当前点 ,如果它的子树大小(包括它自己)有偶数个点,那么肯定在子树里面就互相连完了,它不需要向上连;如果是奇数个点, 就需要去匹配上面的点了,所以 向它父亲连的边就要选。然后就没有然后啦!

这个题告诉我们,要善于对题目进行转换,题目让匹配点这个操作是比较困难的,所以我们可以选择通过选边来替代它,问题就简单了。
代码可戳我查看~
看完邓老师的题解,记得自己去做题提高呀~
欢迎各位大佬来做题写题解,也欢迎大家踊跃在当日讨论贴中提问!

活动奖励:

在牛客博客中写出题解,并回复地址
审核通过可获得(依据题目难度和题解的内容而定)

本道题目4月11日中午12:00之前写的题解有获得牛币资格~

牛客博客开通方式

  1. 如何开通牛客博客:https://www.nowcoder.com/discuss/202952
  2. 如何使用博客搬家功能:进入博客--->设置--->底部博客搬家
  3. 如果你对牛客博客有任何意见或建议:牛客博客意见反馈专贴

全部评论

(41) 回帖
加载中...
话题 回帖

本文相关内容

等你来战

查看全部

热门推荐