給出乙個矩陣,矩陣上的字元有兩種,一種是'x',表示山洞(不可走),一種是'.',表示城鎮
可以在城鎮處放士兵,士兵經過的每個城鎮都會被占領,士兵只能向下走,而且行走的方式和馬相似,不過馬走的是1*2,士兵走的是r*c,士兵不能經過乙個被占領的城鎮
求出最少派出多少個士兵能夠占領所有城鎮
最小路徑覆蓋問題,用二分圖匹配
將所有城鎮拆成兩個集合
如果x能走到y,則x連向y的第二個集合的點
然後將總點數-最大匹配數就是最小路徑覆蓋數了
#include#include#include
#include
#include
using
namespace
std;
char st[51][51
];struct
node
a[21000];int len,last[6100
];void ins(int x,int
y)int dx[5],dy[5
];int
n,m,r,c;
int p(int x,int y)
int match[6100],chw[6100
];bool findmuniu(int x,int
t) }
}return
false;}
intmain()}}
}memset(chw,
0,sizeof
(chw));
memset(match,
0,sizeof
(match));
for(int i=1;i<=n;i++)}}
printf(
"%d\n
",sum);
return0;
}
bzoj2150 部落戰爭
lanzerb的部落在a國的上部,他們不滿天寒地凍的環境,於是準備向a國的下部征戰來獲得更大的領土。a國是乙個m n的矩陣,其中某些地方是城鎮,某些地方是高山深澗無人居住。lanzerb把自己的部落分成若干支軍隊,他們約定 1.每支軍隊可以從任意乙個城鎮出發,並只能從上往向下征戰,不能回頭。途中只能...
BZOJ2150 部落戰爭
bzoj2150 部落戰爭 lanzerb的部落在a國的上部,他們不滿天寒地凍的環境,於是準備向a國的下部征戰來獲得更大的領土。a國是一 個m n的矩陣,其中某些地方是城鎮,某些地方是高山深澗無人居住。lanzerb把自己的部落分成若干支軍隊,他們 約定 1.每支軍隊可以從任意乙個城鎮出發,並只能從...
bzoj2150 部落戰爭
補了一下匈牙利的各種騷操作。最大匹配等於最小覆蓋 最大獨立集 n 最小覆蓋 最大團 補圖的最大獨立集 對於這題,把每個點拆成兩個,可以到達的就連邊。我匈牙利的模版是真不熟。include include include include include include using namespace ...