SCOI2007 蜥蜴(最大流)

2021-06-14 07:03:27 字數 1807 閱讀 2788

1066: [scoi2007]蜥蜴

time limit: 1 sec  memory limit: 162 mb

submit: 914  solved: 427

[submit][status][discuss]

description

在乙個r行c列的網格地圖中有一些高度不同的石柱,一些石柱上站著一些蜥蜴,你的任務是讓盡量多的蜥蜴逃到邊界外。 每行每列中相鄰石柱的距離為1,蜥蜴的跳躍距離是d,即蜥蜴可以跳到平面距離不超過d的任何乙個石柱上。石柱都不穩定,每次當蜥蜴跳躍時,所離開的石柱高度減1(如果仍然落在地圖內部,則到達的石柱高度不變),如果該石柱原來高度為1,則蜥蜴離開後消失。以後其他蜥蜴不能落腳。任何時刻不能有兩隻蜥蜴在同乙個石柱上。

input

輸入第一行為三個整數r,c,d,即地圖的規模與最大跳躍距離。以下r行為石竹的初始狀態,0表示沒有石柱,1~3表示石柱的初始高度。以下r行為蜥蜴位置,「l」表示蜥蜴,「.」表示沒有蜥蜴。

output

輸出僅一行,包含乙個整數,即無法逃離的蜥蜴總數的最小值。

sample input

5 8 2

00000000

02000000

00321100

02000000

00000000

........

........

..llll..

........

........

sample output

1hint

100%的資料滿足:1<=r, c<=20, 1<=d<=3

source

pku 2711 leapin' lizards

解析:還是比較容易看出來是最大流。。。求無法逃脫的最小值即求可以逃脫的最大值。。。

把每個點拆成入點和出點。。。有數字的格仔就在入點和出點之間連容量為map[i][j]的邊

對於有蜥蜴的點,從原點連容量為一的邊到該點的入點。。。

可以跳出去的點,連一條容量為inf的邊。。。

對於地圖內可到達的點,從出點到另乙個點的入點連容量為inf的邊。。。

**:

#include#include#include#includeusing namespace std;

#define inf 1000000000

int r,c,dd,tot=0,l=0,e=0,t;

int map[30][30],val[1000];

int head[10000],ad,sum=0;

struct node

edge[100000];

int d[10000],sumd[10000];

void add(int u,int v,int c)

void read()

scanf("\n");

}for(int i=1;i<=r;i++)

}scanf("\n");

}}int sap(int u,int flow)

}sumd[d[u]]--;

if(sumd[d[u]]==0)d[0]=t+1;

sumd[++d[u]]++;

return res;

}double dis(int x,int y,int x1,int y1)

void work()

}sumd[0]=t+1;

int ans=0;

while(d[0]<=t)

ans+=sap(0,inf);

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

}int main()

SCOI2007 最大流 蜥蜴

非常直觀的建圖方法。對於有蜥蜴的格仔,從源點向該點連一條容量為1的邊,對於每個石柱拆點u,u 連邊u u 容量為石柱高度 對於任意兩個可以到達的石柱u,v,連邊u v,容量為inf 對於任意乙個可以跳出邊界的石柱,連邊u t,容量為inf 做一次最大流即為最多能逃出的蜥蜴數量 include inc...

最大流 SCOI2007 蜥蜴

在乙個n m n m 的矩陣中,每個格仔都有一定的高度,當高度為0時表示該格仔不存在,現在這個矩陣中有若干只蜥蜴,每只蜥蜴跳到格仔上時,該格仔的高度會減一,每只蜥蜴可以跳躍直線距離不大於 d d 的長度,問最少有幾隻蜥蜴無法逃離 最少有幾隻蜥蜴無法逃離 蜥蜴總數 最多有幾隻蜥蜴能逃離 對於每個點,我...

P2472 SCOI2007 蜥蜴(最大流)

自己第一道獨立做題且一遍ac的網路流題紀念.看到這道題我就想到網路流建圖的方式了.首先根據每個高度,我們將每個點拆成兩個點限流.之後根據跳的最大距離,連邊,最後能跳出邊界的與t連邊,跑最大流即可.突然發現最大流與網格圖好像有著某種聯絡.include define ll long long usin...