洛谷P2172 bzoj 2150 部落戰爭

2022-05-20 01:28:16 字數 1527 閱讀 4793

lanzerb的部落在a國的上部,他們不滿天寒地凍的環境,於是準備向a國的下部征戰來獲得更大的領土。

a國是乙個m*n的矩陣,其中某些地方是城鎮,某些地方是高山深澗無人居住。lanzerb把自己的部落分成若干支軍隊,他們約定:

每支軍隊可以從任意乙個城鎮出發,並只能從上往向下征戰,不能回頭。途中只能經過城鎮,不能經過高山深澗。

如果某個城鎮被某支軍隊到過,則其他軍隊不能再去那個城鎮了。

每支軍隊都可以在任意乙個城鎮停止征戰。

所有軍隊都很奇怪,他們走的方法有點像西洋棋中的馬。不過馬每次只能走1*2的路線,而他們只能走r*c的路線。

lanzerb的野心使得他的目標是統一全國,但是兵力的限制使得他們在配備人手時力不從心。假設他們每支軍隊都能順利占領這支軍隊經過的所有城鎮,請你幫lanzerb算算至少要多少支軍隊才能完成統一全國的大業。

輸入格式:

第一行包含4個整數m、n、r、c,意義見問題描述。接下來m行每行乙個長度為n的字串。如果某個字元是'.',表示這個地方是城鎮;如果這個字元時'x',表示這個地方是高山深澗。

輸出格式:

輸出乙個整數,表示最少的軍隊個數。

輸入樣例#1: 複製

3 3 1 2

....x.

...

輸出樣例#1: 複製

4

輸入樣例#2: 複製

5 4 1 1

....

..x.

...x

....

x...

輸出樣例#2: 複製

5

100%的資料中,1<=m,n<=50,1<=r,c<=10。

這道題其實還是比較簡單的 這麼小的資料範圍一看就是乙個而糞土二分圖匹配 

對於每乙個合法點點 就將他向能夠到達的點點連邊 (先拆點) 跑一邊二分圖最大匹配即可

答案就是總的點點數量再減去匹配數 因為每匹配一次 代表這個城鎮可以被軍隊直接一網打盡 也就是少使用一支軍隊

**

#include using

namespace

std;

const

int n = 1e4 + 5

;bool

vis[n];

int zl[5][2], cy[n], cx[n], head[n], nex[2 * n], tov[2 *n];

inttot, cnt, n, m, r, c;

char a[100][100

];void add(int u, int

v) void

init( ) }}

}}int dfs(int

x) }

}return0;

}void

solve( )

}printf(

"%d\n

",cnt -ans);

}int

main( )

洛谷P2150 壽司晚宴

考慮暴力,當n 30 時,素數有2 3 5 7 11 13 17 19 23 29,一共10個,狀壓dp可行,f i j 表示每個人選數的狀態,然後暴力轉移就好了,複雜度o 22n 然後我就想不出來了 有乙個常用到的性質就是,對於任何乙個數字 x 其大於x 的約數只能有乙個或者沒有,利用這個性質,可...

NOI2015 洛谷P2150 壽司晚宴

為了慶祝noi的成功開幕,主辦方為大家準備了一場壽司晚宴。小g和小w作為參加noi的選手,也被邀請參加了壽司晚宴。在晚宴上,主辦方為大家提供了n 1種不同的壽司,編號1,2,3,n 1,其中第種壽司的美味度為i 1 即壽司的美味度為從2到n 現在小g和小w希望每人選一些壽司種類來品嚐,他們規定一種品...

洛谷P2172 國家集訓隊 部落戰爭 題解

不要被 國家集訓隊 的標籤嚇到,其實這題不是很難。本題可以對比p4304 tjoi2013 攻擊裝置 互不攻擊的網路流問題來想。這道題唯一新增的條件就是只能從上往下征戰,於是我們就從8個方向縮減到了四個放向,哪四個呢?aa 1 r bb 1 c aa 2 r bb 2 c aa 3 c bb 3 r...