BZOJ1066 蜥蜴 做題筆記

2021-07-10 19:33:24 字數 1105 閱讀 2994

做這題的時候被自己打的模板坑了,查了好久好久都沒查出錯。。。以後做題也不能過分信任某一段**而不去查它的錯了。

恩,這題的背景總讓人想起科學的上網。。

這題的距離是指歐幾里得距離,就是sqrt( (x1-x2)^2+(y1-y2)^2 ),我之前竟然沒有見過,按照上下左右還有對角線去遍歷,結果顯而易見。。

#include 

#include

#include

#include

using

namespace

std;

const

int n=1000,m=100000,inf=0x3fffffff;

int head[n],ver[m<<1],e[m<<1],nxt[m<<1];

int cnt=0,tot=1,frog=0,r,c,ans=0,s,t,dis;

int d[n],map[100][100],pos[100][100];

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

bool bfs ()

}return0;}

int dinic (int x,int f)

return f-rest;

}bool check (int i,int j,int u,int v)

void build ()

scanf("%*c");

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

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

for (int u=i-dis;u<=i+dis;u++)

for (int v=j-dis;v<=j+dis;v++)

if (check(i,j,u,v)) add(cnt+pos[i][j],pos[u][v],inf);

}int main ()

scanf("%*c");

}build();

while (bfs())

while (tmp=dinic(s,inf)) ans+=tmp;

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

}

bzoj 1066 蜥蜴(最大流)

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

BZOJ 1066 蜥蜴 網路流

很普通的拆點網路流,把每個柱子拆成兩個點 i,j,0 和 i,j,1 對於柱子的高度限制則加邊 i,j,0 i,j,1 height 兩個柱子能互相到達則加邊 i,j,1 i1,j1,0 inf 能到達邊界的柱子加邊 i,j,1 t,inf 有蜥蜴的柱子加邊 s,i,j,0 1 跑一遍最大流,答案就...

BZOJ1066 SCOI2007蜥蜴 最大流

挺顯然的最大流,源向所有有蜥蜴的點連inf邊,所有點拆成入點和出點,入店向出點連流量為高度的邊,限制流量,所有可以一步跳出去的點向匯連inf邊,跑最大流就行了。include include include define inf 99999999 define maxn 1005 using nam...