bzoj2150 部落戰爭

2022-05-31 03:24:24 字數 971 閱讀 2956

題目大意:

男主要占領a國。a國是乙個m*n的矩陣,其中某些地方是城鎮,某些地方是高山深澗。男主有一些軍隊,約定: 

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

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

3. 每支軍隊都可以在任意乙個城鎮停止征戰。 4. 所有軍隊都很奇怪,他們走的方法有點像西洋棋中的馬。不過馬每次只能走1*2的路線,而他們只能走r*c的路線。

假設每支軍隊都能順利占領這支軍隊經過的所有城鎮,問男主至少要多少支軍隊才能完成統一全國的大業。

題解:求最大點獨立集

跟bzoj3175差不多,把能走到的互相連邊構圖,求個最大點獨立集。於是上匈牙利跑最大匹配,最後用總點數減掉就好了。

#include#include#include#include#includeusing namespace std;

#define maxn 3000

struct node

a[maxn*4];int len,first[maxn];

int tim,ask[maxn],bf[maxn];

int map[60][60];

void ins(int x,int y)

bool ffind(int x)

} return false;

}int main()

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

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

if (map[i][j])

tim=ans=0;memset(ask,0,sizeof(ask));

memset(bf,-1,sizeof(bf));

for (i=1;i<=num;i++)

ans=num-ans;

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

return 0;

}

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 ...