棋盤上的守衛

2021-08-07 03:14:58 字數 903 閱讀 5065

在乙個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 4

1 3 10 8

2 1 9 2

6 7 4 6

sample output

19

hint

在(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 以下每行是一組測試資料,每組包括棋盤上的兩個位置,第乙個是起...