博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 1001 [BeiJing2006]狼抓兔子
阅读量:6096 次
发布时间:2019-06-20

本文共 1353 字,大约阅读时间需要 4 分钟。

题目链接:

题意: ...

很容易想到求的是一个最小割=最大流。

之前一直用的刘汝佳的模板STL过题,很久没用过数组模拟了。

再次熟悉一下写法,first数组是索引数组,标记的结点的最后一条边,利用next数组找到上一条边。

1 #include 
2 3 using namespace std; 4 5 #define N 1100000 6 int n,m,first[N],next[N*6],v[N*6],w[N*6],tot,jy,ans,vis[N],S,T,xx,pos[N]; 7 8 void Add(int x,int y,int z) 9 {10 w[tot] = z;11 v[tot] = y;12 next[tot] = first[x];13 first[x] = tot++;14 }15 16 void add(int x,int y,int z)17 {18 Add(x,y,z);19 Add(y,x,z);20 }21 22 bool bfs()23 {24 memset(vis,-1,sizeof(vis)),vis[S]=0;25 queue
q;26 q.push(S);27 while(!q.empty())28 {29 int t=q.front();30 q.pop();31 for(int i=first[t]; ~i; i=next[i])32 if(w[i]&&vis[v[i]]==-1)33 vis[v[i]]=vis[t]+1,q.push(v[i]);34 }35 return vis[T]!=-1;36 }37 38 int dfs(int x,int y)39 {40 if(x==T)return y;41 int r=0;42 for(int i=first[x]; ~i&&y>r; i=next[i])43 if(w[i]&&vis[v[i]]==vis[x]+1)44 {45 int t=dfs(v[i],min(y-r,w[i]));46 w[i]-=t,w[i^1]+=t,r+=t;47 }48 if(!r)vis[x]=-1;49 return r;50 }51 52 int main()53 {54 memset(first,-1,sizeof(first));55 scanf("%d%d",&n,&m);56 S=m+1,T=n*m+m;57 for(int i=1; i<=n; i++)58 for(int j=1; j

 

转载于:https://www.cnblogs.com/TreeDream/p/6350087.html

你可能感兴趣的文章
工作流引擎添新丁:Flowable6.0发布
查看>>
Visual C++ 2012入门经典(第6版)
查看>>
我的友情链接
查看>>
shell 更改文件后缀-字符串操作
查看>>
L2TPV3--静态
查看>>
我的友情链接
查看>>
mysql复制
查看>>
初创团队持续集成的落地与实现(gitlab+python)
查看>>
Android wifi状态三种广播
查看>>
C 函数sscanf()的用法
查看>>
python模块之hashlib: md5和sha算法
查看>>
linux系统安装的引导镜像制作流程分享
查看>>
解决ros建***能登录不能访问内网远程桌面的问题
查看>>
pfsense锁住自己
查看>>
vsftpd 相关总结
查看>>
bash complete -C command
查看>>
解决zabbix 3.0中1151端口不能运行问题
查看>>
RAID基础及软RAID实现方式
查看>>
管子之上令下行
查看>>
CentOS6.8系统内核参数优化
查看>>