題意:給你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 ...