poj3436(拆點最大流)

2022-07-19 13:45:39 字數 1173 閱讀 2300

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

解題思路:首先最大流,建立乙個超級源點,這個源點和所有前三個數字沒有1的機器相連,建立乙個超級匯點與所有後三個數字全為1的機器相連,中間所有的機器拆成兩個點,邊權為這個機器每小時的組裝量,拆點的意義就是因為流過這個點的流量有限制

**:

#include#include#include#include#includeusing namespace std;

const int inf=0x3f3f3f3f;

const int maxn=5050;

struct sc

fna[maxn];

struct node

a[100];

struct edge

edge[maxn];

int head[maxn],cnt;

int pre[maxn],visit[maxn];

int n,p,cot;

int start,end;

void add(int u,int v,int w)

int bfs(int s,int e)

}return 0;

}int ek()

k=pre[end];

while(k!=-1)

ans+=sub;

}return ans;

}int main()

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

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

for(int j=1;j<=n;j++)

if(flag==0)

}int ans=ek();

printf("%d ",ans);

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

for(int j=head[i+n];j!=-1;j=edge[j].next)

printf("%d\n",cot);

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

for(int j=head[i+n];j!=-1;j=edge[j].next)

}

POJ 3436 拆點做最大流

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

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 ...