程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> poj 3281 Dining (最大流Dinic)

poj 3281 Dining (最大流Dinic)

編輯:C++入門知識

題目鏈接: poj 3281

題目大意: 有N頭奶牛,A種食物和B種飲料,每頭奶牛都有自己喜歡的食物和飲料

問有最多有多少頭奶牛既可以得到自己喜歡的食物又可以得到喜歡的飲料

解題思路: 開始沒有把奶牛分成兩個點,這樣會導致幾種食物流入同一頭奶牛

正確的構圖:

1.建立超級源點,源點分別指向A種不同的食物,容量為1

2.建立超級匯點,B種不同的飲料分別指向匯點,容量為1

3.每頭奶牛分成兩個點T和T'',T指向T'',容量為1

4.把T奶牛喜歡的食物指向T,容量為1,再把T''指向喜歡的飲料

PS:用鄰接表時要注意反向邊也要加入,因為需要不斷增廣直到最優解

代碼:

//19:37--->20:53
#include 
#include 
#include 
#define MAX 105
#define INF 0x3f3f3f3f
int S,E,visit[MAX<<2],flag[MAX<<2][MAX<<2],Map[MAX<<2][MAX<<2];
struct snode{
    int c,to,next;
}Edge[MAX*MAX*MAX];

int listb[MAX*MAX*MAX],pre[MAX<<2],Index;

int Min(int a,int b)
{
    return(a

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved