zoukankan      html  css  js  c++  java
  • SGU 0438 The Glorious Karlutka River =) 动态流

    题目大意:有一条东西向流淌的河,宽为W,河中有N块石头,每块石头的坐标(Xi, Yi)和最大承受人数Ci已知。现在有M个游客在河的南岸,他们想穿越这条河流,但是每个人每次最远只能跳D米,每跳一次耗时1秒。问他们能否全部穿越这条河流,如果能,最少需要多长时间。(0 <= N <= 50, 0 < M <= 50, 0 <= D <= 1000, 0 < W <= 1000, 0 < Xi < 1000, 0 < Yi < W, 0 <= Ci <= 1000)

    题解:动态流的基础题了吧。首先想到MCMF,发现wa了。。。然后想了一会发现是因为每个人是可以不跳的,所以就只能很悲哀的对时间拆点上动态流了。

    接下来的叙述忽略石头的拆点Ci,连接边全都不大于D这两条限制条件。

    对于t时刻,我们先连接超级源点到t时刻的石头(代表了蹲了t-1个时候的现在爆发的人。。。),然后连接t-1时刻石头到超级汇点(代表可以冲过终点线的人,注意不是t时刻是因为那些人还需要用这一秒钟来冲到对岸呢),然后连接t-1时刻的石头到t时刻的石头(代表往前走了一步的)。然后对于每一个时刻跑最大流,如果等于人数了就行了。

    那么时间的上限呢?不难想到是n+m的:每个人都走一遍所有的石头,一个人接在一个人的后面,就n+m了,不可能比这个时间还多。

    然后注意一下这道题的很多细节:我们要处理出所有两点间距离,同时由于河岸是一条直线要特别计算。。。同时还要对石头拆点,精细计算每一个石头的点编号别冲突了,,,稍稍不注意就会写错。。。

    总而言之呢,这道题还是极好的。

  • 相关阅读:
    浅谈Objeact.clone克隆(纯个人理解,如有错误请指正)
    Spring集成Swagger,Java自动生成Api文档
    Spring @Value注入值失败,错误信息提示:Could not resolve placeholder
    触发器
    存储过程
    JavaEE笔记(十四)
    JavaEE笔记(十三)
    JavaEE笔记(十二)
    JavaEE笔记(十一)
    vue相关面试知识点总结
  • 原文地址:https://www.cnblogs.com/chxer/p/4573127.html
Copyright © 2011-2022 走看看