POJ 3436 拆點做最大流

2021-06-05 07:53:30 字數 1189 閱讀 8099

這道題好長..看了好久才看懂..囧..也就是說每個machine對於電腦半成品所包含零件的輸入有三種要求..0代表不能有該零件輸入..1代表必須有該零件輸入..2代表有或沒有無所謂...而每個machine產生的電腦半成品中每個零件有兩種狀態..0代表半成品包含該零件,1代表半成品不包含該零件..題目中最開始是給一堆沒有任何零件的半成品..最終需要的是所有零件都包含的成品..問最多能得到多少成品電腦..

建立乙個超級源點,其所有的s為0,q為無窮大..建立乙個超級匯點,其所有的d為1,q為無窮大...將所有的點拆成匯點和出點,匯點到出點的流量為其q..乙個machine的結果滿足另乙個machine的輸入的建立有向線段...在這個過程中超級源點和超級匯點都參與..

從超級源點到超級匯點跑最大流..最大流的結果就是輸出的最多成品電腦數..

而要得出用了哪些路徑,每條路徑流過的流量.那麼就判斷輸入時的那些個個machine間的有向線段剩餘容量的變化..

program:

#include#include#include#include#include#define oo 2000000000

using namespace std;

struct node1

machine[55];

struct node2

line[20005];

int n,p,m,_link[205],ans,num,way[505],dis[205];

bool inqueue[205];

queuemyqueue;

bool bfs()

k=line[k].next;}}

return dis[n];

}bool dfs(int p,int flow)

return true;

}num++;

k=_link[p];

while (k)

k=line[k].next;

}num--;

return false;

}void maxflow()

return;

}int main()

n++;

machine[0].q=machine[n].q=oo;

for (j=1;j<=p;j++) machine[n].s[j]=1;

m=0;

for (i=1;i<=n;i++)

for (i=0;i

poj3436(拆點最大流)

題意 給你p和n,p代表每台計算器需要幾個部分組成,n代表有幾個組裝機器,接下來n行,每行第乙個數代表這台機器能夠每小時組裝幾台,剩下前三個數字表示使用這台機器需要的前置條件 0代表當前組裝不能有這個部分,1代表得有,2代表無所謂 剩下三個數字表示使用這台機器後的組裝有那幾個部分,問你最多能組裝多少...

POJ 3436網路流 拆點 簡單處理

寫的第一道網路流。非板題。網路流貌似核心是在於建圖的處理。poj 3436 看了題解才做出來。要求規劃出合法生產線,這種形式基本就和網路流相關了。具體題意是 有乙個產品,有k個部件,給出n臺機器,每台機器接受一定的半成品,輸出新的半成品。最終成品是全部部件都在的成品。每個機器都有單位時間最大生產量,...

POJ 3436 網路流 最大流 輸出路徑

這裡的輸出路徑不太理解 include include include include include include include includeusing namespace std const int maxn 110 const int inf 0x3f3f3f3f int p1,n,m ...