網路流習題

2021-07-31 15:05:07 字數 1503 閱讀 9035

1.(飛行員配對問題)每架飛機需要2個飛行員,乙個英國,乙個外籍,現在告訴你每個外籍飛行員可以和哪些英國飛行員配合,求最多能配對多少對 

二分圖最大匹配

1匈牙利

2最大流 對於每個外籍i,向他可以配合j的英籍 build(i,j,1)

對於每個外籍i build(s,i,1)   對於每個英籍j build(j,t,1)

2.(scoi2007修車)同一時刻有n位車主帶著他們的愛車來到了汽車維修中心 維修中心共有m位技術人員,不同的技術人員對不同的車進行維修所用的時間是不同的 現在需要安排這m位技術人員所維修的車及順序,使得顧客平均等待的時間最小 說明:顧客的等待時間是指從他把車送至維修中心到維修完畢所用的時間 

費用流n輛車,m個工人。

把每個工人拆成n個點 a[i][j]表示第i個工人修倒數第j輛車。

對於每輛車i  build(s,i,1,0) 

和所有n*m拆點build(i,a[j][k],1,time[i][j]*k) 

對於所有的拆點 build(a[j][k],t,1,0);

由於求平均ans=最大流/n

考慮第i個工人,他修第j輛車只對後面要修的車有影響,而前面修過的車已經對當前沒有影響了

而這個影響就是後面每個將要修理的車都多等待了time的時間

其他邊流量都顯然為1,每輛車修一次,每個工人一次只能修理一輛車

3.(scut128)給乙個長度100的 正整數序列a 定義它的bx子串行是滿足 前乙個數是後乙個數的乙個因子

例如 1 2 6 48 96為 1 2 3 6 48 86 96的乙個bx序列 

對於a 假設 它的最長bx子串行長度為k 求 最少刪掉幾個數 使得 它的最長子序列長度小於k

t組資料 <=20

n       <=100

n個數代表a <=10^924

1 3 2 6//ans=1

62 4 8 3 9 27//ans=2

第一組 bx有 1 3 6 和 1 2 6 刪掉 1 或 6都可以滿足

第二組 bx有 2 4 8 和 3 9 27  任意從兩序列各刪掉乙個才能滿足

sol:先dp求出最長的序列 f[i]表示以a[i]結尾的最長bx序列 f[i]=max(f[j]+1) (a[i]%a[j]==0 j<=i)找到k

對於每個點拆點成一進一出兩個點

對於所有f[i]==1的點 build(s,i,1); 表示源點連向起點

對於所有f[i]==k的點 build(i+n,t,1); 表示終點連向匯點

對於所有的f[i]==f[j]+1 && a[i]%a[j]==0 && i>=j 的點 build(j+n,i,1) j的出邊連向i的進邊

這樣建圖相當於把所有的最長bx子串行全部建了出來 那我們要求的就是 刪掉最少的邊 讓這個網路流中斷 相當於每一條連向匯點的邊都會在路徑上被破壞 這就是求這個圖的 最小割

而又有 最大流最小割定理:網路流中,能夠從源點到達匯點的最大流量==如果從網路中移除就能夠導致網路流中斷的邊的集合的最小容量和

所以再跑一次最大流即為答案

網路流習題

題意 有 n nn 個事件,每個事件需要完成 c ic i ci 次。每個事件只能在一周中的特定日期完成,可以完成無限次。每天所有完成事件的總次數不能超過 e ee 次。問最少幾天可以完成所有事件 思路 網路流 二分 include h define ll long long define int ...

網路流 費用流

這個好像不考 沒事可以騙分 費用流,顧名思義,就是有費用的流,也就是說,給乙個網路流圖中的每條弧增加乙個單位流量費用。一般來說求解的費用流都是最大流最小費用。好像沒什麼好bb的 這裡推薦使用zkw演算法求解最小費用流,看著 理解就行,應該還是很好理解的。zkw演算法在稠密圖上跑得飛快,在稀疏圖上還不...

網路流 費用流

網路流有很多種類 其中最大流 有增廣路演算法和預流推進演算法。增廣路演算法就是不斷的新增增廣路。其中的dinic演算法。會稍微提到isap演算法 poj1273 首先想到dfs一直往後延伸,然後從源點到匯點計算每條路,但是這樣只是單條路的最值,有時可能因為走一條路而間接的認定了除這條路以外的某個路通...