- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
最近我读到一个关于树的问题但是我发现很难解决这个问题。这是问题:
有一个国家/地区有n 个城市(2 到 10^5) 和(n-1) 条双向道路,这样就可以在任何一对城市之间旅行城市。我们有 1 辆魔法卡车,它可以在城市之间行驶,但需要 1 个单位时间(如果已装载) 和 0 个单位时间(如果未装载) 在相邻城市之间旅行,并且最多可以持有 1 单位产品。
现在您可以在任何城市拥有一位需要刚好 2 个单位的产品并且不能等待超过 2 个单位的时间的客户。
现在的问题是,我们必须根据给定的限制最小化存储总数:
在国家/地区分配存储,以便您至少可以按时完成第一笔订单。鉴于可以在任何城市下订单。
时间限制:1秒
我尝试过的:
我认为最糟糕的方法是暴力破解。尝试在每个城市放置存储(2^n 种可能性)并检查是否可以在邻近城市的帮助下完成每个城市的订单。但是这个的时间复杂度将是(n * 2 ^ n)。所以根本行不通。
我认为的第二种方法是以某种方式在树上使用 DP。而且我也不确定这是否是最佳的。从上面的问题我可以确保 叶子肯定有 1 个存储空间。 我在想 DP,从根开始,检查 child 是否可以帮助完成它的订单,并相应地为那个城市分配存储空间,叶子上有底壳。但问题是, children 也可以完成 parent 的订单,所以它形成了循环。所以,它对我也没有帮助。
我考虑的最后一种方法是对答案本身应用二分搜索。由于答案可能位于 (1,n) 之间,因此可以按 nLog(n) 顺序找到答案。但同样的问题是,我想不出在具有给定存储数量的城市中分配存储的最佳方式。
所以,就是这样..我很努力但无法解决这个问题。任何帮助,将不胜感激。 :)
注意:我不知道他们为什么把问题陈述得这么复杂。他们可以很容易地以更简单的方式解释问题。结果我在网上再也找不到这个问题了。我猜它在 codeforces 的某个地方。
最佳答案
关于该图需要注意的重要一点是,有 n 个城市和 n-1 条道路,并且所有城市都是可达的;这意味着:
每个城市都有两种可能性;要么:
这也意味着一个单连接的城市(道路的终点)总是有一个存储设施,而一串双连接的城市应该(最佳)交替地有一个存储设施或没有,这将给我们决定在何处放置存储设施时的起点。
蓝色:当前节点;绿色:存储;橙色:无存储; +:需要另一个有存储空间的邻居; ?: 已访问但尚未解决
这给了我们以下算法:
这基本上是一个“遍历所有道路并再次回溯”的算法,因此访问的节点数为 2×N,复杂度为线性或 O(N)。
值得注意的是,访问城市的顺序不会改变结果,即存储设施的数量,但可能会改变它们的一些位置。考虑 4 个城市的这两个解决方案:
S - / - S - S (solved left to right)
S - S - / - S (solved right to left)
靠近实际代码,让我们看看在确定终点后要做什么。该图由节点组成,例如这个:
NODE "city" C1
- neighbours: [C2, C4, C7]
- has_storage: undefined <- at first; will be set to true/false
- needs_more_storage: true/false <- we'll add this property as we go
- visited: true/false <- we'll add this property as we go
我们从一个端点开始,然后对于每个节点,我们将:
关于algorithm - 修改树上的动态规划,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45091794/
我正在创建我的第一个 WAR 文件。我一直在试验 ant buildfile 语法,我的 buildfile 的第一部分从我的 Eclipse 项目中获取内容并将其放入 /dist 文件夹中,然后将其
我是一名学习 SQL 和 PHP 的学生,我接到了一项任务,要使用 PHP 和 mySQLi 创建学生反馈表,我真的一直在思考如何为项目设计数据库! 我正在创建一个系统,用户可以在其中登录网页,如果用
这个问题在这里已经有了答案: Is it possbile to test for expected errors when the testee exits with failure using
我目前正在设计和开发一个 Web 应用程序,该应用程序有可能快速增长。我将提供一些一般信息,然后继续我的问题。我会说我是一名中级网络程序员。 以下是一些规范:MySQL - 数据库后端PHP - 用于
我不知何故无法在我的日志解析器应用程序中实现报告功能。 这是我目前所做的: 我正在编写一个应用程序,它读取日志文件并在字符串中搜索可以在用户配置文件中定义的多个正则表达式。对于从配置中解析的每个所谓的
我有兴趣学习如何在多开发团队场景中设计/规划 Web 应用程序开发。 假设“项目经理/负责人”的角色: 成功的 Web 应用程序开发需要哪些“文档”? 需要什么 UML 图,需要什么程度? 在设计/计
table a (t_a): id name last first email state country 0 sklass klass steve
我们建立了一个广泛使用 JQuery UI 的 AJAX 网站。我们有 30 多个自制的 JQuery UI 小部件(动态加载)。我们到处都使用 JQuery native 小部件:对话框、 slid
我是一名优秀的程序员,十分优秀!