吃飯 網路流

2022-09-03 06:27:10 字數 1702 閱讀 5475

n' role="presentation">n

n頭牛,每頭牛有自己喜歡的食物和飲料,每種食物或飲料只有乙個。求最多能讓多少頭牛吃到食物並喝到飲料。 in

put' role="presentation">inp

utinput

4 3 3

2 2 1 2 3 1

2 2 2 3 1 2

2 2 1 3 1 2

2 1 1 3 3

ou

tput

' role="presentation">out

puto

utpu

t

3
很明顯的最大流題目。這道題匈牙利會超時,正解是di

nic' role="presentation">din

icdi

nic。

這道題最難的也就是考點是建圖。很容易想到這樣的建法(權值均為1):

但是這樣的話,就有可能一頭牛吃多個食物及飲料,例如上圖中牛

1' role="presentation">1

1可以既吃食物

1' role="presentation">1

1,飲料

2' role="presentation">2

2組成的**,又可以吃食物

2' role="presentation">2

2,飲料

d' role="presentation">d

d組成的**。

所以,這裡就要拆點。將一頭牛拆成兩頭,中間連一條權值為

1' role="presentation">1

1的線,就可以保證不會有一頭牛吃多組**的情況。

bool bfs() //分層}}

return (dep[t]int dfs(int u,int low)

}return0;}

int main()

for (int j=1;j<=dnum;j++) //牛b連向飲料

}for (int i=1;i<=n;i++) //牛a連向牛b

for (int i=1;i<=f;i++) //s連向食物

for (int i=1;i<=d;i++) //飲料連向t

while (bfs())

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

return

0;}

吃飯 網路流

有 n role presentation n n頭牛,每頭牛有自己喜歡的食物和飲料,每種食物或飲料只有乙個。求最多能讓多少頭牛吃到食物並喝到飲料。in put role presentation inp utinput 4 3 3 2 2 1 2 3 1 2 2 2 3 1 2 2 2 1 3 1...

網路流 費用流

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

網路流 費用流

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