思路:根據題意可以將圖中的點分成兩種點,一種(i+j)為奇數的點(紅點),一種(i+j)為偶數的點(黑點),i為橫座標,j為縱座標,設乙個超級起點和乙個超級終點,起點到紅點建正向邊和反向邊,正向邊權值為該紅點的值,紅點到黑點建邊,黑點到終點建邊,權值為黑點的值,然後跑網路流,輸出為所有的點的總和減去最大流
ac**:
#include#include#include#include#include#include#include#include#include#includeusing namespace std;
#define ll long long
const int mod=1e9+7;
const int inf=0x3f3f3f3f;
const ll inff=0x3f3f3f3f3f3f3f3f;
const ll n=105;
const ll m=105;
#define mef(x) memset(x,-1,sizeof(x))
#define me0(x) memset(x,0,sizeof(x))
#define mei(x) memset(x,inf,sizeof(x))
using namespace std;
ll poww(ll a,ll b)
return ans;
}struct edge
edge[n*m*16];
int cnt,first[n*m],dis[n*m];
void init()
void add(int u,int v,int w)
int n,m,al[n][m],sal;
int fx=;
int bfs(int s,int t)//建層次圖
for(int i=first[x];i!=-1;i=edge[i].next)}}
if(dis[t]==-1)
else
}int dfs(int s,int flow)//flow 到大某一節點的最大流
int ans=0;
for(int i=first[s];i!=-1;i=edge[i].next)}}
return ans;//某一節點的最終流量
}int dinc(int s,int t)
return flow;
}int main()
}init();
for(int i=1;i<=n;i++)}}
else}}
cout
}
洛谷P2774 方格取數問題
洛谷p2774方格取數問題 題目鏈結 將題目反著考慮,假設現在所有數都取,需要刪掉一部分數,使得剩下的數沒有公共邊且刪掉的數之和最小。容易發現,兩個位置有公共邊當且僅當他們橫縱座標的和的奇偶性不同。建立乙個二分圖,左邊為座標和為奇數的點,右邊為座標和為偶數的點,將左右兩邊存在公共邊的點連起來。s向左...
洛谷 P2774 方格取數問題
通過題目描述我們可以很明顯的看出要通過二分圖建模,二分圖求最大獨立點集很容易,就是建立二分圖求n 最小割,然而這裡加入了權值,而且權值是在點上的,那麼我們對於每個點連一條到源點或匯點的容量等於權值的邊,求最小割即可,見胡伯濤 include include include include inclu...
洛谷P2774 方格取數問題
題目鏈結 將題目反著考慮,假設現在所有數都取,需要刪掉一部分數,使得剩下的數沒有公共邊且刪掉的數之和最小。容易發現,兩個位置有公共邊當且僅當他們橫縱座標的和的奇偶性不同。建立乙個二分圖,左邊為座標和為奇數的點,右邊為座標和為偶數的點,將左右兩邊存在公共邊的點連起來。s向左邊的每個點建邊,權值為點的權...