在乙個n*m的棋盤上要放置若干個守衛。對於n行來說,每行必須恰好放置乙個橫向守衛;同理對於m列來說,每列
必須恰好放置乙個縱向守衛。每個位置放置守衛的代價是不一樣的,且每個位置最多只能放置乙個守衛,乙個守衛
不能同時兼顧行列的防禦。請計算控制整個棋盤的最小代價。
input
第一行包含兩個正整數n,m(2<=n,m<=100000,n*m<=100000),分別表示棋盤的行數與列數。
接下來n行,每行m個正整數
其中第i行第j列的數w[i][j](1<=w[i][j]<=10^9)表示在第i行第j列放置守衛的代價。
output
輸出一行乙個整數,即占領棋盤的最小代價。
sample input
3 41 3 10 8
2 1 9 2
6 7 4 6
sample output
19hint
在(1,1),(2,2),(3,1)放置橫向守衛,在(2,1),(1,2),(3,3),(2,4)放置縱向守衛。
思路:主要就是標記你選擇乙個數字的行和列,
**如下:
#include#include#includeusing namespace std;
typedef long long ll;
int n,m,x;
ll ans;
int cnt;
int f[200010],vis[200010];
struct e
; e(int u,int v,int k):u(u),v(v),k(k){};
}e[200010];
bool cmp(e n, e m)
{ return n.k
BZOJ4883 棋盤上的守衛 最小基環樹
給乙個n m 1e5 n m leq1e5 n m 1e 5的棋盤,然後每個棋盤都可以放乙個守衛,你可以選擇是讓它保護橫向的也可以讓他保護縱向的。然後乙個位置最多只能放乙個守衛,放置在 i,j i,j i,j 這個位置的代價是wi,jw wi,j 然後求使得所有的位置都被守護的最小代價。完全不太會做...
BZOJ4883 棋盤上的守衛(最小生成樹)
bzoj 首先 n 行 m 列的棋盤顯然把行列拆開考慮,即構成了乙個 n m 個點的圖。我們把格仔看成邊,那麼點 x,y 看成 x 與 y 的一條邊,方向自己隨便定。那麼我們的任務就是選擇一些邊,使得所有點的入度至少為 1 既然要最小則顯然為恰好為 1 那麼我們現在有 n m 條邊,n m 個點,要...
棋盤上的距離
描述 西洋棋的棋盤是黑白相間的8 8的方格,棋子放在格仔中間。如下圖所示 王 後 車 象的走子規則如下 寫乙個程式,給定起始位置和目標位置,計算王 後 車 象從起始位置走到目標位置所需的最少步數。輸入第一行是測試資料的組數t 0 t 20 以下每行是一組測試資料,每組包括棋盤上的兩個位置,第乙個是起...