Codevs 1907 方格取數 3 最小割

2021-08-03 15:13:09 字數 870 閱讀 8607

傳送門:1907 方格取數 3

思路:直接求取哪些不好求,但是我們可以求要捨棄哪些,將所有格仔分成兩部分,使得每一部分中都沒有相鄰的格仔,然後一部分連線源點,另一部分連線匯點,權值為格仔中的數字,兩部分中原本相鄰的格仔之間連邊,權值為inf,這樣圖中任意乙個割即為可以捨棄的一種組合,最小割就是所有可以捨棄的組合中權值最小的那個。

這種將整個圖劃分為源和匯兩部分然後求解的問題是最小割的基本模型。

**://isap int

#include #include #include #include #define ll long long

#define maxn 10005

#define inf 0x3f3f3f3f

using namespace std;

int n;//實際建圖點數(最好比圖中總點數大一點)

struct edgeedge[maxn*100];

int cur[maxn],pre[maxn],gap[maxn],path[maxn],dep[maxn];

int cnt=0;//實際儲存總邊數

void init()

void add(int u,int v,int w,int rw=0)//加邊 有向圖三個引數,無向圖四個

bool bfs(int s,int t)//其實這個bfs可以融合到下面的迭代裡,但是好像是時間要長

} }return dep[s]!=-1;

}int isap(int s,int t)

}else

add((i-1)*m+j,sink,w[i][j]);

}n=sink+1;

cout<

codevs 1907 方格取數3

這個系列終於做完了。又是一道網路流 因為不能取相鄰的點,很容易發現需要二分圖 一半的點連源,另一半連匯,流量為map i,j 相鄰的點連起來,流量為inf 答案就是總和減最大流 最大流。看這篇吧 include include include include define inf 0x3f3f3f3...

codevs 1907 方格取數 3

在乙個有m n 個方格的棋盤中,每個方格中有乙個正整數。現要從方格中取數,使任意2 個數所在方格沒有公共邊,且取出的數的總和最大。試設計乙個滿足要求的取數演算法。第1 行有2 個正整數m和n,分別表示棋盤的行數和列數。接下來的m行,每行有n個正整數,表示棋盤方格中的數。對於給定的方格棋盤,按照取數要...

1907 方格取數 3

時間限制 2 s 空間限制 256000 kb 題目等級 大師 master 題解檢視執行結果 問題描述 在乙個有m n 個方格的棋盤中,每個方格中有乙個正整數。現要從方格中取數,使任 意2 個數所在方格沒有公共邊,且取出的數的總和最大。試設計乙個滿足要求的取數演算法。程式設計任務 對於給定的方格棋...