洛谷2472 蜥蜴(網路流)

2021-08-29 22:58:33 字數 1110 閱讀 2998

令人智熄的字串讀入操作。。。。。在bzoj上過了然後氵谷全t?emmm。。。。。。

網路流的題難點就在於建圖,這道題還是比較明顯,首先每個點還是要拆點限制流量,上限設為石柱高度表示最多可以跳過這麼多蜥蜴。

建立乙個起點s和終點t,每個有蜥蜴的石柱對應的入點就和起點s連線,s與入點間的弧容量為1(含義是該石柱只能有乙個蜥蜴,如果容量大於1,就有可能在跑最大流時出現乙個石柱有多個蜥蜴的情況),每個與邊界距離足夠近的石柱對應的出點和終點t連線,t與出點間的弧容量為inf,這樣t與出點間的弧容量不會影響到結果,此題的圖就建立完成了,再跑一遍最大流,最大流等於能逃脫的蜥蜴數量,輸出時用總蜥蜴數減去能逃脫的蜥蜴數即可。

#includeusing namespace std;

const int maxn=1e4+10;

const int maxm=5e5+10;

const int inf=0x3f3f3f3f;

int n,m,cnt,s,t,mind,ans;

int head[maxn],cur[maxn],depth[maxn];

int nxt[maxm],to[maxm],w[maxm];

int mx[maxn],my[maxn],tot;

char x;

int read()

void add(int x,int y,int z)

void add(int x,int y,int z)

bool bfs()

} }return depth[t]!=0;

}int dfs(int u,int dist)

} }return 0;

}int dinic()

return ans;

}int dist(int x1,int y1,int x2,int y2)

int zh(int x,int y)

int main()

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

for(int i=1;i<=tot;++i)

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

if(i!=j)

cout

}

洛谷P2472蜥蜴

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

P2472 SCOI2007 蜥蜴 網路流

n m n mn m個格仔,每個格仔的石柱高度不同,蜥蜴可以跳到距離不超過d dd的石柱處,並且先前所站的石柱高度減一,為0則不能站,然後求有多少只蜥蜴不可以逃脫。考慮網路流,每只蜥蜴表示乙個流,將每個石柱分成入點和出點,然 點連出點流量為石柱高度,然後每個可以走的點之間出點連入點無限,之後有蜥蜴的...

洛谷P2472 SCOI2007 蜥蜴 題解

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