兩道利用網絡流來驗證是否存在一種方案滿足要求的題目 woj1124 sgu326

woj1124題意:說有n支隊伍,要互相進行一些場次的比賽,一共還有m場沒有比。給出每個隊的總分以及m場的比賽情況。問是否有方案安排這m場比賽的結果,使得第n支隊伍最後的總分大於其他任一支隊伍的總分。一場比賽贏了得兩分,輸了0分,平了1分。(1<=n<=100,1<=m<=1000)

思路:

1.既然讓你隨便安排,那麼先讓第n支隊伍的比賽全贏了,讓第n支隊伍的總分最大化,這樣最穩,如果這時已經有隊伍的總分大於第n支,那麼怎麼安排其餘的場次都沒有用了。

2、然後安排其他的比賽。爲了讓其他的隊伍不能追上第n支隊伍的總分,那麼每支隊伍提升分數的範圍就被限制在了0~(sum[n]-sum[i]-1),也就是每支隊的需求只能是這些。

3、那麼每場比賽我們就可以看作是供給,第i場比賽能提供的分數一共就兩分,所以,我們對第i場比賽建邊(s,i,2),然後對進行i場比賽的兩隻隊建邊(i,x,2),(i,y,2).表示這場比賽x可贏,y可贏,也可平,因爲容量就是2,流的話只有這三種情況,是的,符合題意。然後對每支球隊建邊(x,t,sum[n]-sum[x]-1).然後最大流一下。看最後的最大流是否等於2*比賽場數,是則yes,否則no。

4.想一下爲什麼滿足上述條件就行了呢,那小於又是什麼意思,沒有大於這種情況。首先我們只有2*比賽場數的供應,有Σ(sum[n]-sum[i]-1)(1<=i<n)的需求。如果滿流了(即等於),也就是說供應小於等於需求,此時代表的意義就是我們有一種比賽安排方式使比賽都比完了也只能滿足每支隊的分數比第n支隊少一分,或者更少。如果最大流小於2*比賽場數,那麼也就是說所有的隊伍的需求都滿了,即所有的隊伍都被提升到距第n支隊伍只差一分,但還剩下比賽,不管那場比賽誰勝誰贏,或者平,都會有一支或兩支隊伍的分數跟第n支隊伍持平或超過。

代碼就不貼了,反正是模板。


sgu326

題意:nba的球隊分爲很多組(有幾組都沒關係),球隊之間會進行小組內的比賽和小組間的比賽。給出n支球隊目前勝利的場數,和還要比的場數(包括小組內的和小組間的)以及小組內各隊還要比的場數。問是否存在一種比賽結果的安排使得球隊1最後的勝利場數至少和小組內任何一支其他球隊一樣。

輸入是,先給n,然後是n個場數,再給n個場數,然後給個n*n的矩陣表示小組內各隊要比的場數。

思路:

1、跟上題一樣.首先讓1隊不管組內或組間的比賽都贏了,其他同組的隊伍組間的比賽都輸,就是第二個n個場數裏面除了1隊的還要比的場數,其餘的不要管就好了,1隊贏得越多,其他隊越少越穩.若做完上面操作1隊還落後其他隊那麼就直接no。

2、下面只考慮小組內的比賽,首先對矩陣裏面的有比賽的點(即num[i][j]>0,i<j)連邊(s,x,num[i][j]),(x表示這是第幾個大於零的點),然後對該點相關的兩個隊連邊(x,i,num[i][j]),(x,j,num[i][j]),然後每支球隊(除了1隊)連邊(y,t,sum[1]-sum[j])。然後最大流一下,看最大流是否==Σ(num[i][j]).道理跟上題一樣。

3、有看到這個題與i點關聯的兩個隊有連邊(x,u,inf),(x,v,inf)的,這個題我看着跟上面思路一樣就沒有寫代碼。我想兩種建邊方式都行吧。反正從(x,i)和(x,j)流過的流量最多也就num[i][j]。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章