BZOJ-1927-星际竞速-SDOI2010

描述

10 年一度的银河系赛车大赛又要开始了。作为全银河最盛大的活动之一, 夺得这个项目的冠军无疑是很多人的梦想,来自杰森座 α星的悠悠也是其中之一。 赛车大赛的赛场由 N 颗行星和M条双向星际航路构成,其中每颗行星都有 一个不同的引力值。大赛要求车手们从一颗与这 N 颗行星之间没有任何航路的 天体出发,访问这 N 颗行星每颗恰好一次,首先完成这一目标的人获得胜利。 由于赛制非常开放,很多人驾驶着千奇百怪的自制赛车来参赛。这次悠悠驾 驶的赛车名为超能电驴,这是一部凝聚了全银河最尖端科技结晶的梦幻赛车。作 为最高科技的产物,超能电驴有两种移动模式:高速航行模式和能力爆发模式。 在高速航行模式下,超能电驴会展开反物质引擎,以数倍于光速的速度沿星际航 路高速航行。在能力爆发模式下,超能电驴脱离时空的束缚,使用超能力进行空 间跳跃——在经过一段时间的定位之后,它能瞬间移动到任意一个行星。 天不遂人愿,在比赛的前一天,超能电驴在一场离子风暴中不幸受损,机能 出现了一些障碍:在使用高速航行模式的时候,只能由每个星球飞往引力比它大 的星球,否则赛车就会发生爆炸。 尽管心爱的赛车出了问题,但是悠悠仍然坚信自己可以取得胜利。他找到了 全银河最聪明的贤者——你,请你为他安排一条比赛的方案,使得他能够用最少 的时间完成比赛。


分析

  • 凡是遇到使每个点都经过一次且总时间最短(长)的题目就可以考虑网络流的最小费用最大流. 拆点, S向Xi连一条容量为1费用为0的边, Yi向T连一条容量为1费用为0的边, 如果i->j有边, 就从Xi->Yj连一条容量为1费用为路径长度的边. 然后跑S->T最小费用最大流, 费用就是最短路径长度.
  • 分析一下上面的过程, Yi向T的边表示经过了i, 因为最大流所以这些边一定会满流, 而且容量为1表示只经过一次. S向Xi的边表示从i出发, 经过i代表着到达i再从i离开.
  • 对于题目中的瞬移, 其实不需要把所有边全都加上, 只需要加 S->Yi 容量为1费用为瞬移定位时间. 相当于j高速行驶到达i的方案和瞬移到i的方案择优. 可知如果最后S->i的边没有流的话, 最优方案就是到达i之后瞬移到达其他点.

代码

posted @ 2015-03-19 13:29  wfwbz  阅读(112)  评论(0编辑  收藏  举报