bzoj1458 士兵佔據

2021-09-08 04:46:11 字數 2053 閱讀 6475

time limit: 10 sec  

memory limit: 64 mb

submit: 685  

solved: 398

[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

有源匯有上下界最小流問題

將行抽象為左部點,列抽象為右部點。

假設某個位置沒有障礙。就從行相應的節點到列相應的節點連邊。下界為0,上界為1。

在從源點向每行相應的節點連邊,從每列相應的節點向匯點連邊,下界均為該行或列的最少士兵數。上界均為正無窮。

最後求s到t的最小流。

#include#include#include#include#include#include#include#define f(i,j,n) for(int i=j;i<=n;i++)

#define d(i,j,n) for(int i=j;i>=n;i--)

#define ll long long

#define pa pair#define maxn 300

#define maxm 100000

#define inf 1000000000

using namespace std;

int head[maxn],cur[maxn],dis[maxn],in[maxn];

int cnt=1,mx=0,maxflow,n,m,k,x,y,s,t,ss,tt;

bool a[105][105];

struct edge_type

e[maxm];

inline int read()

while (ch>='0'&&ch<='9')

return x*f;

}inline void add_edge(int x,int y,int v)

;head[x]=cnt;

e[++cnt]=(edge_type);head[y]=cnt;

}inline void insert(int x,int y,int l,int r)

inline void build()

}inline bool bfs()

} return false;

}inline int dfs(int x,int f)

} if (!sum) dis[x]=-1;

return sum;

}inline void dinic()

}inline void minflow()

e[cnt].v=e[cnt^1].v=0;

s=n+m+2;t=n+m+1;

dinic();

printf("%d\n",ans-maxflow);

}int main()

mx=max(mx,tot);

tot=0;

f(i,1,n)

mx=max(mx,tot);

f(i,1,k)

f(i,1,m) f(j,1,n) if (!a[i][j]) insert(i,j+m,0,1);

build();

add_edge(t,s,inf);

minflow();

}

bzoj1458 士兵佔據

time limit 10 sec memory limit 64 mb submit 685 solved 398 submit status id 1458 style color rgba 0,0,255,1 text decoration none rel noopener discuss ...

BZOJ 1458 士兵占領

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

bzoj 1458 士兵占領

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