黑白染成二分图, 然后不能同时选的就连边, 最大匹配数为m, t为不能放的数目, 则题目所求最大点独立集为 n*n-m-t

-------------------------------------------------------------------------

#include<cstdio>
#include<cstring>
#include<algorithm>
 
using namespace std;
 
const int maxn = 209;
const int dir[8][2] = {{-1, -2}, {-2, -1}, {1, -2},
  {2, -1}, {-1, 2}, {-2, 1}, 
  {1, 2}, {2, 1}};
 
struct edge {
int to;
edge* next;
} E[maxn * maxn * 8], *pt = E, *head[maxn * maxn];
 
void addedge(int u, int v) {
pt->to = v; pt->next = head[u]; head[u] = pt++;
}
 
char str[maxn][maxn];
int N, vis[maxn * maxn], C, match[maxn * maxn], ans;
 
int Id(int x, int y) {
return x * N + y;
}
 
bool dfs(int x) {
for(edge* e = head[x]; e; e = e->next) if(vis[e->to] != C) {
vis[e->to] = C;
if(!~match[e->to] || dfs(match[e->to])) {
match[e->to] = x;
return true;
}
}
return false;
}
 
bool checkY(int x, int y) {
return (x + y) & 1;
}
 
void init() {
scanf("%d", &N);
ans = N * N;
for(int i = 0; i < N; i++) scanf("%s", str[i]);
for(int i = 0; i < N; i++) {
for(int j = 0; j < N; j++) if(str[i][j] == '0') {
int id = Id(i, j);
if(!checkY(i, j)) {
for(int k = 0; k < 8; k++) {
int x = i + dir[k][0], y = j + dir[k][1];
if(x >= 0 && x < N && y >= 0 && y < N && str[x][y] == '0' && checkY(x, y))
addedge(id, Id(x, y));
}
}
} else
ans--;
}
}
 
void work() {
memset(match, -1, sizeof match);
memset(vis, -1, sizeof vis);
int lim = N * N;
for(C = 0; C < lim; C++) if(dfs(C)) ans--;
printf("%d\n", ans);
}
 
int main() {
init();
work();
return 0;
}

-------------------------------------------------------------------------

3175: [Tjoi2013]攻击装置

Time Limit: 10 Sec  Memory Limit: 128 MB
Submit: 754  Solved: 362
[Submit][Status][Discuss]

Description

给定一个01矩阵,其中你可以在0的位置放置攻击装置。每一个攻击装置(x,y)都可以按照“日”字攻击其周围的 8个位置(x-1,y-2),(x-2,y-1),(x+1,y-2),(x+2,y-1),(x-1,y+2),(x-2,y+1), (x+1,y+2),(x+2,y+1)
求在装置互不攻击的情况下,最多可以放置多少个装置。

Input

第一行一个整数N,表示矩阵大小为N*N。接下来N行每一行一个长度N的01串,表示矩阵。

Output

一个整数,表示在装置互不攻击的情况下最多可以放置多少个装置。

Sample Input

3
010
000
100

Sample Output

4

HINT

100%数据 N<=200

Source

BZOJ 3175: [Tjoi2013]攻击装置( 匈牙利 )的更多相关文章

  1. 【刷题】BZOJ 3175 [Tjoi2013]攻击装置

    Description 给定一个01矩阵,其中你可以在0的位置放置攻击装置.每一个攻击装置(x,y)都可以按照"日"字攻击其周围的 8个位置(x-1,y-2),(x-2,y-1), ...

  2. BZOJ 3175: [Tjoi2013]攻击装置

    捉水题真是捉上瘾了TUT Description 给定一个01矩阵,其中你可以在0的位置放置攻击装置.每一个攻击装置(x,y)都可以按照“日”字攻击其周围的 8个位置(x-1,y-2),(x-2,y- ...

  3. 【BZOJ 3175】 3175: [Tjoi2013]攻击装置(二分图匹配)

    3175: [Tjoi2013]攻击装置 Description 给定一个01矩阵,其中你可以在0的位置放置攻击装置.每一个攻击装置(x,y)都可以按照“日”字攻击其周围的 8个位置(x-1,y-2) ...

  4. BZOJ3175: [Tjoi2013]攻击装置

    题解: 最大点独立集...好像水过头了... 不过发现我二分图好像忘完了!!! 代码: #include<cstdio> #include<cstdlib> #include& ...

  5. 【BZOJ4808/3175】马/[Tjoi2013]攻击装置 最小割

    [BZOJ4808]马 Description 众所周知,马后炮是中国象棋中很厉害的一招必杀技."马走日字".本来,如果在要去的方向有别的棋子挡住(俗称"蹩马腿" ...

  6. 【洛谷】4304:[TJOI2013]攻击装置【最大点独立集】【二分图】2172: [国家集训队]部落战争【二分图/网络流】【最小路径覆盖】

    P4304 [TJOI2013]攻击装置 题目描述 给定一个01矩阵,其中你可以在0的位置放置攻击装置. 每一个攻击装置(x,y)都可以按照“日”字攻击其周围的8个位置(x-1,y-2),(x-2,y ...

  7. BZOJ_3175_[Tjoi2013]攻击装置_二分图匹配

    BZOJ_3175_[Tjoi2013]攻击装置_二分图匹配Description 给定一个01矩阵,其中你可以在0的位置放置攻击装置.每一个攻击装置(x,y)都可以按照“日”字攻击其周围的 8个位置 ...

  8. bzoj4808: 马 & bzoj3175: [Tjoi2013]攻击装置 (黑白染色+最小割)

    bzoj4808: 马 & bzoj3175: [Tjoi2013]攻击装置 题目:传送门 简要题意: 和n皇后问题差不多,但是这里是每个棋子走日子,而且有些格子不能放棋子.求最多能放多少个棋 ...

  9. BZOJ3175 Tjoi2013 攻击装置(二分图匹配)

    传送门 Description 给定一个01矩阵,其中你可以在0的位置放置攻击装置.每一个攻击装置(x,y)都可以按照"日"字攻击其周围的 8个位置(x-1,y-2),(x-2,y ...

随机推荐

  1. SQL Server | Mysql 对表的unique 的实现方式

    在ANSI SQL 标准中unique 有两种实现方式 1.是可以插入多个空值.也就是说多个null值看成是互不相同的. 2.是只可以插入一个空值,也主是说把所有的空值看也是相同的. 在SQL Ser ...

  2. ODI学习笔记2--ODI产品架构

    ODI学习笔记2--ODI产品架构 ODI产品架构: ODI提供了以下几种管理工具:Designer 用于定义数据转换逻辑,这是最常用的开发工具,大部分的开发任务,包括data store的定义,in ...

  3. linux系统巡检脚本shell实例

    #!/bin/sh BACKUP_TIMESTAMP=`date +%Y%m%d` HOSTNAME=`hostname` num=89 ###################核查文件系统opt### ...

  4. Intro to Computer Science Class Online (CS101) - Udacity

    Intro to Computer Science Class Online (CS101) - Udacity Building a Search Engine

  5. 【Oracle】RAC添加新节点

    RAC添加节点: 环境: OS:OEL5.6 RAC:10.2.0.1.0 原有rac1,rac2两个节点.如今要添加rac3节点: 操作过程: 改动三个节点上的/etc/hosts文件 192.16 ...

  6. Hive索引

    1.        Hive索引概述 Hive的索引目的是提高Hive表指定列的查询速度. 没有索引时.类似'WHERE tab1.col1 = 10' 的查询.Hive会载入整张表或分区.然后处理全 ...

  7. c 跟字符串有关的函数

    1.字符串查找 strstr char * strstr(const char *s1, const char *s2); 在s1中查找s2,如果找到返回首个s2的首地址 char * strcase ...

  8. SDK无法更新

    http://jingyan.baidu.com/article/da1091fbd232fe027949d653.html

  9. 一般处理程序在VS2012中打开问题

    问题:如果你用vs2012建立的一个一般处理程序,运行查看是,出现这样的界面 原因:VS2012默认使用IIS Web服务器,而不是Visual Studio开发服务器,基于安全考虑IIS默认不允许浏 ...

  10. ftp读取txt数据并插入数据库

    去官网下载http://enterprisedt.com/ .netftp组件 目前最新版本为2.2.3,下载后在bin目录中找到edtFTPnet.dll,在项目中添加引用. using Enter ...