網路流 24 題 數字梯形

2021-08-06 07:21:49 字數 2171 閱讀 2770

題目描述

給定乙個由 n n

n 行數字組成的數字梯形如下圖所示。梯形的第一行有 m m

m 個數字。

從梯形的頂部的 m m

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

分別遵守以下規則:

從梯形的頂至底的 m m

m 條路徑互不相交;

從梯形的頂至底的 m m

m 條路徑僅在數字結點處相交;

從梯形的頂至底的 m m

m 條路徑允許在數字結點相交或邊相交。

輸入格式

第 1 1

1 行中有 2 2

2 個正整數 m m

m 和 n n

n,分別表示數字梯形的第一行有 m m

m 個數字,共有 n n

n 行。

接下來的 n n

n 行是數字梯形中各行的數字。

第 1 1

1 行有 m m

m 個數字,第 2 2

2 行有 m+1 m + 1m+

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

資料範圍與提示

1≤m,n≤20 1 \leq m, n \leq 201≤

m,n≤

20根據題目描述建圖:

第一問:

將每個點拆成出點和入點,入點和出點連邊容量為1,保證每個點不重複,每個出點和左下角點以及右下角點連一容量為1

費用為目標點權值的邊,保證了邊不重複。源點與第一行所有點的入點連一條容量為1費用為目標點權值的邊。為保證有且

只有m條路徑,我的方法先讓最後一行每個點與匯點1建邊,容量為1費用為0,再讓匯點1和最終匯點建一容量為m費用為0的邊。

這樣可以保證最終會產生m條路徑。

第二問:

與第一問類似,但是允許重複利用同一節點,那麼只要把每個節點的入點和出點之間的邊的容量修改為inf就好了,其他同上。

第三問:

在第二問的基礎上,把不同點之間所連邊的容量改為inf即可。

三次詢問分別求出最小費用最大流。

#include#include#include#includeusing namespace std;

const int maxm = 10005;

const int maxn = 100005;

const int inf = 1e9 + 7;

struct node

edge[maxn];

int dis[maxm], head[maxm], cur[maxm], pre[maxn], f[1005][1005], map[1005][1005];

int s, t, n, m, cnt;

void init()

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

int bfs()

} }if (dis[t] == inf) return 0;

return 1;

}int mcmf()

ans += minflow*dis[t];

} return ans;

}int main()

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

}} add(id * 2 + 1, t, m, 0);

printf("%d\n", -mcmf());

init();

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

}} add(id * 2 + 1, t, m, 0);

printf("%d\n", -mcmf());

init();

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

}} add(id * 2 + 1, t, m, 0);

printf("%d\n", -mcmf());

return 0;

}

網路流24題 數字梯形問題

網路流24題大多需要spj,所以需要乙個有spj的oj,本系列 均在www.oj.swust.edu.cn測試通過 這絕對是我見過最不要臉的網路流了,一道題竟然赤裸裸的讓你建三個圖,算了,還是耐著性子把它做完了。我們首先要想明白的問題就是如果兩條路徑沒有任何公共點,那麼這兩條路徑一定不會相交,因為這...

網路流24題 數字梯形問題

題面 傳送門思路 三合一題目 但是實際上做好了第乙個就沒有別的問題了 第一問 把每個數字拆成兩個點,中間連一條容量為1,費用為0的邊,以此達到限制每個點流量的目的 然後其餘的不多說,源點到第一層,每一層向下連,最後一層到匯點 第二問 第一問中每個點內部的那條邊容量改成inf就好 第三問 直接dp算了...

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

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