題解 方格取數問題

2021-09-11 00:18:06 字數 989 閱讀 3755

傳送門

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

這個題目也是很明顯的網路流,奇偶性建圖,最後總和-最小割即為答案

#include

#include

#include

using

namespace std;

const

int n=

10100

,m=202000

,inf=(1

<<29)

;int tt=

1,n,m,s,t,head[n]

,dis[n]

,vis[n]

,dep[n]

;long

long maxf=0;

struct pr a[m]

;inline

int read (

)return s;

}void add (

int u,

int v,

int w)

int dinic (

int x,

int flow)

}return flow-rest;

}bool bfs ()}

}return dep[t];}

int x=

;int y=

;int main (

)for

(int i=

1;i<=n;

++i)

for(

int j=

1;j<=m;

++j)}}

int in;

while

(bfs ())

cout

}

題解 方格取數問題

題目戳我 text 相鄰的不能取 黑白染色。染色完之後,我們需要對不能同時選擇的點連線一條流量為 infty 的邊,以保證它們不被割開。即,被割開的一定是連向 s 或 t 的之前連過的邊,邊權是點權。上述連邊保證圖聯通,並保證割掉的邊一定是之前連的邊權為點權的邊。如果不連 infty 的邊,則原圖本...

題解 方格取數

給你乙個n n的格仔的棋盤,每個格仔裡面有乙個非負數。從中取出若干個數,使得任意的兩個數所在的格仔沒有公共邊,就是說所取的數所在的2個格仔不能相鄰,並且取出的數的和最大。包括多個測試例項,每個測試例項包括乙個整數n nn和n n n times n n n個非負數 n 20 n leq 20 n 2...

題解 方格取數問題 網路流

考慮這個要求 沒有共同邊 像極了最小割。最小割 將圖依照 s 和 t 分為兩個互無交集的集合,並且使得刪去的元素 邊 的權值和最小。然後我們看看這個問題,先要分類以確定和 s 在一起和和 t 在一起的點。顯然由於相鄰點是對立的所以我們直接相鄰的連 inf 邊表示這個相鄰關係無法被改變。這樣這條邊在最...