博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
洛谷P3355 骑士共存问题 二分图_网络流
阅读量:5021 次
发布时间:2019-06-12

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

Code:

#include
#include
#include
#include
#include
using namespace std;const int maxn=800004;const int INF=10000000;int A[205][205],B[205][205];int dy[]={-1,-2,-2,-1,1,2,2,1};int dx[]={-2,-1,1,2,-2,-1,1,2};# define pb push_backint s,t;struct Edge{ int from,to,cap; Edge(int u,int v,int c):from(u),to(v),cap(c) {}};struct Dicnic{ vector
edges; vector
G[maxn]; int d[maxn],vis[maxn],cur[maxn]; queue
Q; void addedge(int u,int v,int c){ edges.pb(Edge(u,v,c)); //正向弧 edges.pb(Edge(v,u,0)); //反向弧 int m=edges.size(); G[u].pb(m-2); G[v].pb(m-1); } int BFS() { memset(vis,0,sizeof(vis)); d[s]=0,vis[s]=1;Q.push(s); while(!Q.empty()){ int u=Q.front();Q.pop(); int sz=G[u].size(); for(int i=0;i
0){ d[e.to]=d[u]+1,vis[e.to]=1; Q.push(e.to); } } } return vis[t]; } int dfs(int x,int a){ if(x==t)return a; int sz=G[x].size(); int f,flow=0; for(int i=cur[x];i
0){ f=dfs(e.to,min(a,e.cap)); if(f) { int u=G[x][i]; a-=f; edges[u].cap-=f; edges[u^1].cap+=f; flow+=f; if(a==0)break; } } } return flow; } int maxflow(){ int ans=0; while(BFS()){ memset(cur,0,sizeof(cur)); ans+=dfs(s,INF); } return ans; }}op;int main(){ int n,m; scanf("%d%d",&n,&m); int cnt=0; s=0; for(int i=1;i<=n;++i) for(int j=1;j<=n;++j){ A[i][j]=++cnt; } t=cnt*2+1; for(int i=1;i<=m;++i) { int a,b; scanf("%d%d",&a,&b); B[a][b]=1; } for(int i=1;i<=n;++i) { for(int j=1;j<=n;++j) { if(B[i][j])continue; for(int ii=0;ii<8;++ii) { int yy=dy[ii]+i,xx=dx[ii]+j; if(yy>=1&&yy<=n&&xx>=1&&xx<=n) if(!B[yy][xx])op.addedge(A[i][j],A[yy][xx]+cnt,INF); } } } for(int i=1;i<=n;++i) for(int j=1;j<=n;++j) { if(!B[i][j])op.addedge(s,A[i][j],1); } for(int i=cnt+1;i<=cnt+cnt;++i) { op.addedge(i,t,1); } int ans=cnt-op.maxflow()/2; printf("%d\n",ans-m); return 0;}

  

转载于:https://www.cnblogs.com/guangheli/p/10367587.html

你可能感兴趣的文章
SpringMVC源码剖析(四)- DispatcherServlet请求转发的实现
查看>>
Android中获取应用程序(包)的大小-----PackageManager的使用(二)
查看>>
Codeforces Gym 100513M M. Variable Shadowing 暴力
查看>>
浅谈 Mybatis中的 ${ } 和 #{ }的区别
查看>>
CNN 笔记
查看>>
版本更新
查看>>
SQL 单引号转义
查看>>
start
查看>>
实现手机扫描二维码页面登录,类似web微信-第三篇,手机客户端
查看>>
PHP socket客户端长连接
查看>>
7、shell函数
查看>>
【转】Apache Jmeter发送post请求
查看>>
Nginx 基本 安装..
查看>>
【凸优化】保留凸性的几个方式(交集、仿射变换、投影、线性分式变换)
查看>>
C++ primer plus学习笔记 (1) _Setting out to C++
查看>>
数据结构和算法:递归和迭代算法示例
查看>>
win10 清理winsxs文件夹
查看>>
(LeetCode 203)Remove Linked List Elements
查看>>
《BI项目笔记》用Excel2013连接和浏览OLAP多维数据集
查看>>
.net 获取远程访问的ip
查看>>