P2774 方格取數問題 網路流,最大流,最小割

2021-08-19 21:01:19 字數 887 閱讀 2090

在乙個n*m的數字矩陣中取數,取得數不能相鄰,求能取到的最大價值。

最大價值,那麼反著去想,就是取若干個格仔,讓所有格仔的都不相鄰,要求權最小,那麼就是最小割問題。然後二分建圖。起點與奇數點連容量為該點價值的邊,偶數點與終點連容量為該點價值的邊,然後相鄰的連一條容量無限的邊,這樣就不會割去這條邊,然後所有的權值和減去最小割就是答案。

#include

#include

#include

#include

#include

using

namespace

std;

const

int dx[4]=,dy[4]=;

struct linea[200001];

queue

f;//佇列

int n,d[10055],s,e,m,answ,w,tot,ls[10055];

void addl(int x,int y,int z)//加邊

bool bfs()//在殘量網上建分層圖

}f.pop();

}if (d[e]) return

true;

else

return

false;

}int dinic(int x,int flow)//求最大流

}if (!rest) d[x]=0;

return rest;

}int ansq()

int main()

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

for (int j=1;j<=m;j++)

if ((i+j)&1)

}printf("%d",answ-ansq());//輸出

}

P2774 方格取數問題(網路流)

p2774 方格取數問題 emm.仔細一看,這不是最大權閉合子圖的題嗎!取乙個點 x,y 限制條件是同時取 x,y 1 x,y 1 x 1,y x 1,y 只不過權值取負而已 於是我們把圖分為黑點和白點,同顏色點之間不相鄰,不同顏色的點相鄰 如將 x y 2 1 的點記為黑點 假裝把白點的權值都看成...

P2774 方格取數問題

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

P2774 方格取數問題

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