「TJOI2013」攻击装置
题目链接
\(solution\)
这道题和网络24题之骑士共存问题很相似
只是输入方式不一样而已
详细见:这儿
\(Code\)
#include<bits/stdc++.h>
#define file(a) freopen(a".in","r",stdin);freopen(a".out","w",stdout)
#define rg register
using namespace std;
typedef long long ll;
int n,m,s,t,z,y,x;
inline int read(){
int x=0,f=1;char c=getchar();
while(c<'0'||c>'9') f= (c=='-')?-1:1,c=getchar();
while(c>='0'&&c<='9') x=x*10+c-48,c=getchar();
return f*x;
}
struct node{
int to,next,v;
}a[400001];
int cnt,head[200001],cur[200001];
void add(int x,int y,int c){
a[++cnt].to=y;
a[cnt].next=head[x];
a[cnt].v=c;
head[x]=cnt;
}
queue <int> q;
int dep[100001];
int bfs(){
memset(dep,0,sizeof(dep));
q.push(s),dep[s]=1;
while(!q.empty()){
int now=q.front();
q.pop();
for(int i=head[now];i;i=a[i].next){
int v=a[i].to;
if(!dep[v]&&a[i].v)
q.push(v),dep[v]=dep[now]+1;
}
}
if(dep[t]!=0)
return 1;
else
return 0;
}
int dfs(int k,int list){
if(k==t)
return list;
for(int &i=cur[k];i;i=a[i].next){
int v=a[i].to;
if(a[i].v&&dep[v]==dep[k]+1){
int p=dfs(v,min(list,a[i].v));
if(p){
a[i].v-=p;
if(i%2)
a[i+1].v+=p;
else
a[i-1].v+=p;
return p;
}
}
}
return 0;
}
int Dinic(){
int ans=0;
while(bfs()){
for(int i=0;i<t;i++)
cur[i]=head[i];
int k=dfs(s,2147483);
while(k)
ans+=k,k=dfs(s,2147483);
}
return ans;
}
int f[201][201];
int fx[10]={0,1,1,-1,-1,2,2,-2,-2};
int fy[10]={0,2,-2,2,-2,1,-1,1,-1};
char S[1000];
int main(){
n=read(),s=0,t=n*n+1;
int sum=0;
for(int i=1;i<=n;i++){
cin>>S;
for(int j=0;j<strlen(S);j++){
f[i][j+1]=S[j]-'0';
if(f[i][j+1])
m++;
}
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++){
if(f[i][j])
continue;
if(((i+j)%2)==0)
add((i-1)*n+j,t,1),add(t,(i-1)*n+j,0);
else
add(s,(i-1)*n+j,1),add((i-1)*n+j,s,0);
}
for(int i=1;i<=n;i++)
for(int j=1;j<=n;j++)
for(int k=1;k<=8;k++){
int x=i+fx[k],y=j+fy[k],p=(x-1)*n+y;
if(x>0&&y>0&&x<=n&&y<=n&&((i+j)%2)==1&&!f[i][j]&&!f[x][y])
add((i-1)*n+j,p,10000000),add(p,(i-1)*n+j,0);
}
int ans=Dinic();
printf("%d",n*n-m-ans);
}
「TJOI2013」攻击装置的更多相关文章
- 「TJOI2013」最长上升子序列
「TJOI2013」最长上升子序列 传送门 这个 \(\text{DP}\) 应该都会撒: \[dp_i = \max_{j < i,a_j < a_i}\left\{dp_j\right ...
- 「TJOI2013」循环格
题目链接 戳我 \(Solution\) 我们观察发现循环格要满足每个点的入度都为\(1\) 证明: 我们假设每个点的入读不一定为\(1\),那么必定有一个或多个点的入度为0,那么则不满足循环格的定义 ...
- BZOJ3175: [Tjoi2013]攻击装置
题解: 最大点独立集...好像水过头了... 不过发现我二分图好像忘完了!!! 代码: #include<cstdio> #include<cstdlib> #include& ...
- BZOJ 3175: [Tjoi2013]攻击装置( 匈牙利 )
黑白染成二分图, 然后不能同时选的就连边, 最大匹配数为m, t为不能放的数目, 则题目所求最大点独立集为 n*n-m-t -------------------------------------- ...
- 【洛谷】4304:[TJOI2013]攻击装置【最大点独立集】【二分图】2172: [国家集训队]部落战争【二分图/网络流】【最小路径覆盖】
P4304 [TJOI2013]攻击装置 题目描述 给定一个01矩阵,其中你可以在0的位置放置攻击装置. 每一个攻击装置(x,y)都可以按照“日”字攻击其周围的8个位置(x-1,y-2),(x-2,y ...
- 【BZOJ4808/3175】马/[Tjoi2013]攻击装置 最小割
[BZOJ4808]马 Description 众所周知,马后炮是中国象棋中很厉害的一招必杀技."马走日字".本来,如果在要去的方向有别的棋子挡住(俗称"蹩马腿" ...
- 【BZOJ 3175】 3175: [Tjoi2013]攻击装置(二分图匹配)
3175: [Tjoi2013]攻击装置 Description 给定一个01矩阵,其中你可以在0的位置放置攻击装置.每一个攻击装置(x,y)都可以按照“日”字攻击其周围的 8个位置(x-1,y-2) ...
- BZOJ_3175_[Tjoi2013]攻击装置_二分图匹配
BZOJ_3175_[Tjoi2013]攻击装置_二分图匹配Description 给定一个01矩阵,其中你可以在0的位置放置攻击装置.每一个攻击装置(x,y)都可以按照“日”字攻击其周围的 8个位置 ...
- bzoj4808: 马 & bzoj3175: [Tjoi2013]攻击装置 (黑白染色+最小割)
bzoj4808: 马 & bzoj3175: [Tjoi2013]攻击装置 题目:传送门 简要题意: 和n皇后问题差不多,但是这里是每个棋子走日子,而且有些格子不能放棋子.求最多能放多少个棋 ...
随机推荐
- ITextSharp使用说明 (转)
原文: http://www.cnblogs.com/LifelongLearning/archive/2010/12/28/1919138.html TextSharp是一个生成Pdf文件的开源项目 ...
- crush class实验
标签(空格分隔): ceph,ceph实验,crushmap luminous版本的ceph新增了一个功能crush class,这个功能又可以称为磁盘智能分组.因为这个功能就是根据磁盘类型自动的进行 ...
- 前端自动化工具 -- gulp https://angularjs.org/
gulp是基于流的前端自动化构建工具. gulp是基于stream流的形式,也就是前一个函数(工厂)制造出结果,提供后者使用. 同样的,也是包括基本用法和各插件的使用. 二.基本用法--插件使用 gu ...
- 【原】Coursera—Andrew Ng机器学习—Week 4 习题—Neural Networks 神经网络
[1] Answer:C [2] Answer:D 第二层要输出四个元素a1 a2 a3 a4.输入x有两个,加一个x0是三个.所以是4 * 3 [3] Answer:C [4] Answer:C [ ...
- apk安装包信息
String archiveFilePath="sdcard/DangDang.apk";//安装包路径 PackageManager pm = getPacka ...
- 【HDU6024】Building Shops
题意 有n个教室排成一排,每个教室都有一个坐标,现在,小Q想建一些糖果商店,在这n个教室里面.总的花费有两部分,在教室i建一个糖果屋需要花费ci,对于没有任何糖果屋的P,需要的花费为这个教室到它左边有 ...
- laravel 验证机制validation
Laravel 中 validation 验证 返回中文提示 全局设置 自己建一个zn文件夹,然后把en的4个文件全复制过去,修改validation.php的代码为下面的内容,然后在app.php修 ...
- Docker学习笔记_删除某个镜像
实验:删除某个镜像 sudo docker rmi [Image ID] 1.查看镜像的ID sudo docker images 2.删除镜像 ...
- webservice CXF 相关面试题
Web Service的优点(1) 可以让异构的程序相互访问(跨平台)(2) 松耦合(3) 基于标准协议(通用语言,允许其他程序访问) 1:WEB SERVICE名词解释.JSWDL开发包的介绍.JA ...
- 多重if else和switch case的区别
int main(void) { int id; scanf_s("%d",&id); switch(id) { case 2: printf("John\n&q ...