BZOJ 4808: 马(二分图最大点独立集)
http://www.lydsy.com/JudgeOnline/problem.php?id=4808
题意:
思路:
这图中的两个马只能选一个,二选一,很像二分图吧,对能互吃的两个棋子连线,在所选的任意两个棋子中,都不能互相有连线,这不就是最大点独立集吗?
最大独立集 = 顶点个数 - 最大匹配。记得把坏了的格子去掉。
- #include<iostream>
- #include<cstdio>
- #include<cstring>
- using namespace std;
- int n,m,tot;
- int mp[][], head[], mark[];
- bool vis[];
- struct node
- {
- int v,next;
- }e[*];
- int dx[] = {-,-,-,-,,,,};
- int dy[] = {,-,,-,,-,,-};
- void addEdge(int u, int v)
- {
- e[tot].v = v;
- e[tot].next = head[u];
- head[u] = tot++;
- }
- bool match(int u)
- {
- for(int i=head[u];i!=-;i=e[i].next)
- {
- int v = e[i].v;
- if(!vis[v])
- {
- vis[v] = true;
- if(mark[v]==- || match(mark[v]))
- {
- mark[v] = u;
- return true;
- }
- }
- }
- return false;
- }
- int main()
- {
- //freopen("in.txt","r",stdin);
- int num = ;
- scanf("%d%d",&n,&m);
- for(int i=;i<=n;i++)
- for(int j=;j<=m;j++)
- {
- scanf("%d",&mp[i][j]);
- if(mp[i][j]) num++;
- }
- tot = ;
- memset(head,-,sizeof(head));
- for(int i=;i<=n;i++)
- for(int j=;j<=m;j++)
- {
- if(!mp[i][j])
- {
- for(int k=;k<;k++)
- {
- int x = i+dx[k];
- int y = j+dy[k];
- if(x< || x>n || y< || y>m) continue;
- if(mp[x][y]==) continue;
- int p1 = (i-)*m+j;
- int p2 = (x-)*m+y;
- addEdge(p1,p2);
- }
- }
- }
- int sum = ;
- memset(mark,-,sizeof(mark));
- for(int i=;i<=n*m;i++)
- {
- memset(vis,false,sizeof(vis));
- if(match(i)) sum++;
- }
- printf("%d\n",n*m-num-sum/);
- return ;
- }
BZOJ 4808: 马(二分图最大点独立集)的更多相关文章
- BZOJ 4808 马 二分图最大独立集
题目应该就是最大独立集了吧,没什么了,平面图求最大独立集需要/2的, WQH说加直接+双向边考研过,结果真的过了,应该是匈牙利算法寻找的 时候更加快了吧.(方便找边) #include<cstd ...
- BZOJ 1143: [CTSC2008]祭祀river(二分图最大点独立集)
http://www.lydsy.com/JudgeOnline/problem.php?id=1143 题意: 思路: 二分图最大点独立集,首先用floyd判断一下可达情况. #include< ...
- LightOJ1171 Knights in Chessboard (II)(二分图最大点独立集)
题目 Source http://www.lightoj.com/volume_showproblem.php?problem=1171 Description Given an m x n ches ...
- POJ1466 Girls and Boys(二分图最大点独立集)
最大点独立集就是无向图中最多的两两不相邻的点集. 二分图最大点独立集=顶点数-二分图最大边独立集(二分图最大匹配) 这一题男女分别作YX部,如果x和y有浪漫关系则连边,如此构造二分图,答案显然就是最大 ...
- 【bzoj4808】【马】二分图最大点独立集+简单感性证明
(上不了p站我要死了,侵权度娘背锅) Description 众所周知,马后炮是中国象棋中很厉害的一招必杀技."马走日字".本来,如果在要去的方向有别的棋子挡住(俗称"蹩 ...
- POJ 2771 Guardian of Decency (二分图最大点独立集)
Guardian of Decency Time Limit: 3000MS Memory Limit: 65536K Total Submissions: 6133 Accepted: 25 ...
- 解题:BZOJ 4808 马
题面 以前写过的题,翻出来学习网络流写二分图匹配,因为复杂度更优秀,$Dinic$是$O(sqrt(n)m)$哒~ 原点向左部点连流量为$1$的边,左部点向对应右部点连流量为$1$的边,右部点向汇点连 ...
- bzoj 4808: 马【匈牙利算法】
网格图黑白染色,然后能互相攻击到的点之间连边,跑匈牙利算法最大匹配,答案是好点个数-最大匹配(最大独立集) 注意pao的时候只从一种颜色的格子统计即可 #include<iostream> ...
- HDU--3829--Cat VS Dog【最大点独立集】
链接:http://acm.hdu.edu.cn/showproblem.php?pid=3829 题意:动物园有n条狗.m头猫.p个小孩,每一个小孩有一个喜欢的动物和讨厌的动物.如今动物园要转移一些 ...
随机推荐
- canvas绘图,html5 k线图,股票行情图
canvas绘图,html5 k线图,股票行情图 canvas跟其他标签一样,也可以通过css来定义样式.但这里需要注意的是:canvas的默认宽高为300px * 150px,在css中为canva ...
- 自写Jquery插件 Tab
原创文章,转载请注明出处,谢谢!https://www.cnblogs.com/GaoAnLee/p/9067017.html 每每看到别人写的Jquery插件,自己也试着学习尝试,终有结果,废话不多 ...
- makefile 变量展开
Makefile中给变量赋值: = 是递归展开式变量 value1 = 5 value2 = $(value1) value1 = 6 最终$(value2)就变成了6 := 是直接展开 ...
- OLED屏幕那些次像素有趣的排列方式
http://www.dzsc.com/data/2016-6-2/109856.html 我们今天的重点内容为倒数第二列内容的上半部分,也就是RGB排列和Pentile排列.在介绍OLED屏幕时候我 ...
- mysql执行计划查看工具explain
在优化sql语句时,我们经常会用到explain语句,这里对explain语句做一个详细的总结说明. The EXPLAIN statement provides information about ...
- url去重 --布隆过滤器 bloom filter原理及python实现
https://blog.csdn.net/a1368783069/article/details/52137417 # -*- encoding: utf-8 -*- ""&qu ...
- php脚本#!/usr/bin/env php写法的好处
脚本语言的第一行,目的就是指出,你想要你的这个文件中的代码用什么可执行程序去运行它.比如php脚本的第一行可以写成如下几种格式#!/usr/bin/php#!/usr/bin/env php#!/us ...
- P2698 [USACO12MAR]花盆Flowerpot(单调队列+二分)
P2698 [USACO12MAR]花盆Flowerpot 一看标签........十分后悔 标签告诉你单调队列+二分了............ 每次二分花盆长度,蓝后开2个单调队列维护最大最小值 蓝 ...
- Kali系列之aircrack-ng wifi密码穷举
kali linux安全渗透 网卡:rtl8187 工具aircrack-ng 操作+ 查看无线网卡信息 ifconfig 或者 iwconfig 有个是wlan0的就是您的外置无线网卡 启动网卡监听 ...
- [c/c++] programming之路(2)、kill QQ,弹出系统对话框,吃内存等
一.删除文件 二.盗取密码的原理 #include<stdlib.h> //杀掉QQ,然后提示网络故障,请重新登陆,弹出高仿界面,获取账号密码,然后打开QQ进行登录 void main() ...