傳送門
在乙個有 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 邊表示這個相鄰關係無法被改變。這樣這條邊在最...