做這題的時候被自己打的模板坑了,查了好久好久都沒查出錯。。。以後做題也不能過分信任某一段**而不去查它的錯了。
恩,這題的背景總讓人想起科學的上網。。
這題的距離是指歐幾里得距離,就是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...