bzoj 1458 士兵占領

2021-07-11 00:08:12 字數 1836 閱讀 5946

time limit: 10 sec  

memory limit: 64 mb

submit: 784  

solved: 458 [

submit][

status][

discuss]

有乙個m * n的棋盤,有的格仔是障礙。現在你要選擇一些格仔來放置一些士兵,乙個格仔裡最多可以放置乙個士兵,障礙格里不能放置士兵。我們稱這些士兵占領了整個棋盤當滿足第i行至少放置了li個士兵, 第j列至少放置了cj個士兵。現在你的任務是要求使用最少個數的士兵來占領整個棋盤。

第一行兩個數m, n, k分別表示棋盤的行數,列數以及障礙的個數。 第二行有m個數表示li。 第三行有n個數表示ci。 接下來有k行,每行兩個數x, y表示(x, y)這個格仔是障礙。

輸出乙個數表示最少需要使用的士兵個數。如果無論放置多少個士兵都沒有辦法占領整個棋盤,輸出」jiong!」 (不含引號)

4 4 4

1 1 1 1

0 1 0 3

1 42 2

3 34 3

4資料範圍

m, n <= 100, 0 <= k <= m * n

題解:由源點向所有可以放置士兵的位置連一條容量為2的邊,再由每個位置向它所屬的行和列的點連邊容量為1,然後由所有的行和列向匯點連邊,容量為該行(該列)所需的士兵個數。

考慮為什麼源點向放置士兵的位置連邊為2?我是這麼想的,因為乙個位置不僅需要向他所在的列連邊還需要向他所在的行連邊,但是行和列是互不影響的,所以只能分別補充,因為補充的容量為1,所以每個點只能算一次。

雖然ac了,但是本人還是覺得不是很科學,看了看網上的標解:

此題的思路是先放滿棋盤,然後考慮最多可以刪多少個。。。

某一行和某一列的可以放的格仔數小於需求就直接jiong掉

然後從源向每一行連邊,流量為可以放的格仔數 – 需求的格仔數(也就是可以刪多少格仔)

從每一列向匯,同上.

從每乙個非障礙的格仔的行向列連邊流量為1

跑一遍最大流即可ans=可放格仔數-maxflow

覺得還是標解科學。。。。

#include#include#include#include#include#include#define n 200000

#define m 1000000

using namespace std;

int n,m,k;

int tot=-1,l[120],h[120],a[120][120],deep[n];

int point[n],dis[n],can[n],laste[n],mincost,maxflow;

int next[m*2],v[m*2],remain[m*2],c[m*2],cur[n],num[n];

int fl[n],fh[n];

const int inf=1e9;

void add(int x,int y,int z)

int addflow(int s,int t)

now=t;

while (now!=s)

return ans;

}void bfs(int s,int t)

}void isap(int s,int t)

bool f=false;

for (int i=cur[now];i!=-1;i=next[i])

}if (!f)

}}int main()

int num=n*m;

for (int i=1;i<=n;i++)

for (int j=1;j<=m;j++)

if (!a[i][j])

for (int i=1;i<=n;i++)

if (fl[i]

BZOJ 1458 士兵占領

time limit 10 sec memory limit 64 mb submit 632 solved 366 submit status discuss description 有乙個m n的棋盤,有的格仔是障礙。現在你要選擇一些格仔來放置一些士兵,乙個格仔裡最多可以放置乙個士兵,障礙格里不...

bzoj1458 士兵占領

time limit 10 sec memory limit 64 mb submit 685 solved 398 submit status discuss 有乙個m n的棋盤,有的格仔是障礙。現在你要選擇一些格仔來放置一些士兵,乙個格仔裡最多可以放置乙個士兵,障礙格里不能放置士兵。我們稱這些士...

BZOJ1458 士兵占領

給定乙個 n times m 的方格,其中有一些障礙格仔,限定每行每列分別至少要有的士兵數,問最少要擺多少個士兵。最大流考慮在非障礙格仔都擺上乙個士兵,假如還是不夠數,那麼無解 否則考慮哪些士兵可以去掉仍然滿足限制條件。所以源點連 該行可以擺放的數量 限定最小值 的邊權到行的每個節點,同理,列的每個...