令人智熄的字串讀入操作。。。。。在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表示地圖外一點,當一根柱子能跳到地圖外...