wikioi 1913 數字梯形問題(費用流)

2022-05-12 02:13:17 字數 2220 閱讀 4873

如果本題沒有詢問2和3,那麼本題和蚯蚓那題一模一樣。

我們來分析詢問2和3。

首先,詢問2允許重複經過點。我們想想詢問1的做法,是拆點,為什麼?因為要控制只走一次。so,詢問2就將拆的點去掉就行了。重構一次圖,將上邊的點向下連邊,容量為1,費用為下邊那個點的權值。然後現在還有第一行的點沒有構造,那麼將源連邊到第一行的點,和之前相同,容量為1,費用為這些點的權值。接下來我們連最後一行到匯,因為可以允許重複點,那麼就將容量設為oo,費用為0。(為什麼這樣不會走重複邊呢?容量為1當然不會重複走。。)

然後我們來看詢問3,只是在2的基礎上加了個允許邊重複。哈哈,重複邊還不簡單,將中間連的那些邊容量全部設為oo,只不過在源連的邊容量要為1,因為要限制次數。

#include #include #include #include #include #include using namespace std;

#define rep(i, n) for(int i=0; i<(n); ++i)

#define for1(i,a,n) for(int i=(a);i<=(n);++i)

#define for2(i,a,n) for(int i=(a);i<(n);++i)

#define for3(i,a,n) for(int i=(a);i>=(n);--i)

#define for4(i,a,n) for(int i=(a);i>(n);--i)

#define cc(i,a) memset(i,a,sizeof(i))

#define read(a) a=getint()

#define print(a) printf("%d", a)

#define dbg(x) cout << #x << " = " << x << endl

#define printarr(a, n, m) rep(aaa, n)

inline const int getint()

inline const int max(const int &a, const int &b)

inline const int min(const int &a, const int &b) e[m];

inline void add(const int &u, const int &v, const int &c, const int &w)

inline const bool spfa(const int &s, const int &t)

} vis[u]=0;

} return d[t]!=1000000000;

}int mcf(const int &s, const int &t)

return ret;

}void rebuild() {

cc(ihead, 0); cnt=1; int now;

for1(i, 1, n) for1(j, 1, m+i-1) {

now=id[i][j];

if(i

給定乙個由n 行數字組成的數字梯形如下圖所示。梯形的第一行有m 個數字。從梯形

的頂部的m 個數字開始,在每個數字處可以沿左下或右下方向移動,形成一條從梯形的頂

至底的路徑。

規則1:從梯形的頂至底的m條路徑互不相交。

規則2:從梯形的頂至底的m條路徑僅在數字結點處相交。

規則3:從梯形的頂至底的m條路徑允許在數字結點相交或邊相交。

對於給定的數字梯形,分別按照規則1,規則2,和規則3 計算出從梯形的頂至底的m

條路徑,使這m條路徑經過的數字總和最大。

第1 行中有2個正整數m和n(m,n<=20),分別

表示數字梯形的第一行有m個數字,共有n 行。接下來的n 行是數字梯形中各行的數字。

第1 行有m個數字,第2 行有m+1 個數字,…。

將按照規則1,規則2,和規則3 計算出的最大數字總和輸出

每行乙個最大總和。

2 5

2 33 4 5

9 10 9 1

1 1 10 1 1

1 1 10 12 1 1

66

7577

網路流24題 數字梯形問題 費用流

洛谷傳送門 loj傳送門 勞資把 spfa 裡 cost 陣列初始化從 1 改成 inf 就特麼 a 了,梯形裡有負數,浪費了半個多小時,心態都崩了 問題難度好像是反過來的 源點向第一排的點都流量為 1 費用為 0 的邊,最後一排的點向匯點連流量為 1 費用為 0 的邊 第三問點點之間流量 inf ...

洛谷P4013 數字梯形問題(費用流)

傳送門 兩個感受 碼量感人 大佬nb 規則一 m 條路徑都不相交,那麼每乙個點只能經過一次,那麼考慮拆點,把每乙個點拆成 a 和 b 然後兩點之間連一條容量 1 費用該點本身數值的邊,表明這個點只能被選一次,然後每乙個點的 b 向它能到達的點的 a 連邊,表明能從這個點到另乙個點,容量隨意,費用 0...

題解 數字梯形問題

這樣一道傻題我調了這麼久 三個任務建圖是這樣的,由於太簡單就不xjb解釋了,乙個點拆位入點和出點 graph lr s w 1,c 1 入點1 入點1 w 1,c 點權1 出點1 入點2 w 1,c 點權2 出點2 入點3 w 1,c 點權2 出點3 出點1 w 1,c 0 入點2 出點1 w 1,...