博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ 4808: 马(二分图最大点独立集)
阅读量:4307 次
发布时间:2019-06-06

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

题意:

 

 

思路:

这图中的两个马只能选一个,二选一,很像二分图吧,对能互吃的两个棋子连线,在所选的任意两个棋子中,都不能互相有连线,这不就是最大点独立集吗?

最大独立集 = 顶点个数 - 最大匹配。记得把坏了的格子去掉。

1 #include
2 #include
3 #include
4 using namespace std; 5 6 int n,m,tot; 7 int mp[205][205], head[40005], mark[40005]; 8 bool vis[40005]; 9 10 struct node11 {12 int v,next;13 }e[8*40005];14 15 int dx[] = {-2,-2,-1,-1,1,1,2,2};16 int dy[] = {
1,-1,2,-2,2,-2,1,-1};17 18 void addEdge(int u, int v)19 {20 e[tot].v = v;21 e[tot].next = head[u];22 head[u] = tot++;23 }24 25 bool match(int u)26 {27 for(int i=head[u];i!=-1;i=e[i].next)28 {29 int v = e[i].v;30 if(!vis[v])31 {32 vis[v] = true;33 if(mark[v]==-1 || match(mark[v]))34 {35 mark[v] = u;36 return true;37 }38 }39 }40 return false;41 }42 43 int main()44 {45 //freopen("in.txt","r",stdin);46 int num = 0;47 scanf("%d%d",&n,&m);48 for(int i=1;i<=n;i++)49 for(int j=1;j<=m;j++)50 {51 scanf("%d",&mp[i][j]);52 if(mp[i][j]) num++;53 }54 tot = 0;55 memset(head,-1,sizeof(head));56 for(int i=1;i<=n;i++)57 for(int j=1;j<=m;j++)58 {59 if(!mp[i][j])60 {61 for(int k=0;k<8;k++)62 {63 int x = i+dx[k];64 int y = j+dy[k];65 if(x<1 || x>n || y<1 || y>m) continue;66 if(mp[x][y]==1) continue;67 int p1 = (i-1)*m+j;68 int p2 = (x-1)*m+y;69 addEdge(p1,p2);70 }71 }72 }73 int sum = 0;74 memset(mark,-1,sizeof(mark));75 for(int i=1;i<=n*m;i++)76 {77 memset(vis,false,sizeof(vis));78 if(match(i)) sum++;79 }80 printf("%d\n",n*m-num-sum/2);81 return 0;82 }

 

转载于:https://www.cnblogs.com/zyb993963526/p/7904002.html

你可能感兴趣的文章
JDK1.8-Stream API使用
查看>>
cant connect to local MySQL server through socket /tmp/mysql.sock (2)
查看>>
vue中的状态管理 vuex store
查看>>
Maven之阿里云镜像仓库配置
查看>>
Maven:mirror和repository 区别
查看>>
微服务网关 Spring Cloud Gateway
查看>>
SpringCloud Feign的使用方式(一)
查看>>
SpringCloud Feign的使用方式(二)
查看>>
关于Vue-cli+ElementUI项目 打包时排除Vue和ElementUI
查看>>
Vue 路由懒加载根据根路由合并chunk块
查看>>
vue中 不更新视图 四种解决方法
查看>>
MySQL 查看执行计划
查看>>
OpenGL ES 3.0(四)图元、VBO、VAO
查看>>
OpenGL ES 3.0(五)纹理
查看>>
OpenGL ES 3.0(八)实现带水印的相机预览功能
查看>>
OpenGL ES 3.0(九)实现美颜相机功能
查看>>
FFmpeg 的介绍与使用
查看>>
Android 虚拟机简单介绍——ART、Dalvik、启动流程分析
查看>>
原理性地理解 Java 泛型中的 extends、super 及 Kotlin 的协变、逆变
查看>>
FFmpeg 是如何实现多态的?
查看>>