飞扬的小鸟

来源:互联网 发布:手机移动网络劫持 编辑:程序博客网 时间:2024/05/01 13:37

Description

Flappy Bird是一款风靡一时的休闲手机游戏。玩家需要不断控制点击手机屏幕的频率来调节小鸟的飞行高度,让小鸟顺利通过画面右方的管道缝隙。如果小鸟一不小心撞到了水管或者掉在地上的话,便宣告失败。
现在小鸟们遇到了一个难题,他们遇到了一堵巨大的墙,墙上仅有m个洞供他们通过,由于小鸟们的体型不同且墙上洞的形状也不同,所以每种体型的鸟通过每个洞的时间都不同,鸟的体型共有n种,第i种体型的鸟通过第j个洞需要的时间记为T(i,j),且一个洞必须前一只鸟通过之后后一只鸟才能开始通过。
从时刻0开始,鸟开始通过,而每一只鸟的等待时间为从时刻0到自己已经通过洞的时间。现在知道了第i种体型的鸟有pi只,请求出使所有鸟都通过墙的最少的等待时间之和。

Data Constraint

这里写图片描述

Solution

这题是费用流裸题啊。建图:

  • 从源点连向n种鸟,流量为鸟的数量,费用为0
  • 将m个洞拆点,连向汇点,流量为1,费用为0
  • 将n种鸟,连向m*x个点,流量为1,费用为t[i][j]*1,t[i][j]*2……t[i][j]*x

我一开始以为就这样跑一遍费用流就好,然而拆点后,边的数量太多。
然后我们发现当m个洞拆的点,在前一个点没满流时,后一个点是没有意义的。所以我们一开始先把n种鸟连向m个洞的第一个点,当满流时,在连向下一个点。所以这道题就是费用流动态加边。

1 0
原创粉丝点击