洛谷P2472蜥蜴

2021-08-15 11:41:50 字數 1075 閱讀 7912

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

輸入輸出格式

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

解析:挺好的建模思路。主要的難點就在於怎麼處理柱子它會自己掉下去,這可以轉化為改點的的入度多大,然後可以考慮將改點複製一遍,流量為柱子高度。

程式:#include#include#include#includeusing namespace std;

#define inf 1e9

struct point

e[100001];

int num,c,r,s,d,t,n,ans;

int head[1001],h[1001];

int g[1001][1001];

int get(int x,int y)

void add(int from,int to,int dis)

int cal(int x1,int y1,int x2,int y2)

int dfs(int x,int dis)

} }if(!sum)

h[x]=-1;

return sum;

}bool bfs()

} }return h[t];

}int dinic()

int main()

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

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

for(int j=1;j<=c;j++)

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

for(int j=1;j<=c;j++)

for(int k=1;k<=r;k++)

for(int l=1;l<=c;l++)

}cout<

洛谷2472 蜥蜴(網路流)

令人智熄的字串讀入操作。在bzoj上過了然後氵谷全t?emmm。網路流的題難點就在於建圖,這道題還是比較明顯,首先每個點還是要拆點限制流量,上限設為石柱高度表示最多可以跳過這麼多蜥蜴。建立乙個起點s和終點t,每個有蜥蜴的石柱對應的入點就和起點s連線,s與入點間的弧容量為1 含義是該石柱只能有乙個蜥蜴...

洛谷P2472 SCOI2007 蜥蜴 題解

這道題用最大流解決。首先構建模型。一根柱子可以跳入和跳出,於是拆成兩個點 入點和出點。每一根柱子的入點和出點連一條流量為高度的邊,來限制蜥蜴跳入的次數。當柱子a可以調到柱子b時,就從a的出點向b的入點連邊,流量inf。s向所有有蜥蜴的柱子的入點連邊,流量為1 t表示地圖外一點,當一根柱子能跳到地圖外...

洛谷P2472 SCOI2007 蜥蜴 題解

這道題用最大流解決。首先構建模型。一根柱子可以跳入和跳出,於是拆成兩個點 入點和出點。每一根柱子的入點和出點連一條流量為高度的邊,來限制蜥蜴跳入的次數。當柱子a可以調到柱子b時,就從a的出點向b的入點連邊,流量inf。s向所有有蜥蜴的柱子的入點連邊,流量為1 t表示地圖外一點,當一根柱子能跳到地圖外...