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