SWE · Coding / Onsite summary

Airbnb 滑雪路线最大净分:到达奖励减边成本的图 DP

汇总帖给 travel 边、point 奖励和固定 start/多个 end;图若为 DAG 可拓扑 DP,正收益环时须明确边界。

题目重点:汇总帖给 travel 边、point 奖励和固定 start/多个 end;图若为 DAG 可拓扑 DP,正收益环时须明确边界。

题意与假设

这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。

  • 训练版是有向无环图,end 节点是名称以 END 开头的终点;固定起点 start 分数 0,起点奖励不计。
  • 每次到达 v 得 reward(v) 并扣 travel 边 cost(u,v);未列 reward 的节点记 0,路径可在任意 end 结束。
  • 若同一节点可重复访问且正收益环可达 end,最大分可能无界;若只允许简单路径,一般图上问题复杂度变高,不能直接用 DAG DP。

解题路线

  1. 解析 travel 边与 point 奖励,明确重复边和节点标识;只考虑从 start 可达的子图,并找 end 候选。
  2. 若确认 DAG,求拓扑序,设 dp[start]=0、其余 -∞,按拓扑序对每条边 u→v 更新 dp[v]=max(dp[v],dp[u]−cost+reward(v))。
  3. 维护 parent 以恢复最优路径;若多个 end,返回 max dp[end],无可达 end 返回明确空/失败值。
  4. 正确性:拓扑序处理 v 前所有前驱最优值已算好,每条入边只扩展对应最优前缀,因 DAG 不会遗漏循环改进。
  5. 若图有环,应先问是否只允许简单路径/一次奖励;如果允许重复且收益正环,先检测可达并能到 end 的正环,不可声称有限答案。

手动走一遍

训练图 start→A cost3、A reward5,故 dp[A]=2;A→END1 cost4、END1 reward3,得到 1。另有 start→B cost2、B reward1,B→END2 cost1、END2 reward7,得 5,应选择 END2。数字是按题目规则构造的示例。

规模与取舍

DAG 上拓扑 DP O(V+E) 时间、O(V+E) 存图和父指针;如果输入并非 DAG,该复杂度与算法不适用,需按实际限制另解。

易错点与追问

容易失分的边界

  • 只计终点奖励或只减最后一条边成本。
  • 把多终点中的第一个当唯一答案。
  • 没有判断不可达就把 -∞ 与整数相加。
  • 在一般有环图上直接跑拓扑 DP。
  • 把最大收益路径当作最短路取负权后直接 Dijkstra。

继续深挖

  • 若存在环但每个点奖励只拿一次怎么办?
  • 怎样输出路径而非只返回分数?
  • 多个同分终点如何 tie-break?
  • 若数据持续更新,是否能增量维护?
✓已复制微信号!