BZOJ 2150: 部落战争 最大流

2150: 部落战争

Time Limit: 1 Sec  

Memory Limit: 256 MB

题目连接

http://www.lydsy.com/JudgeOnline/problem.php?id=2150

Description

lanzerb的部落在A国的上部,他们不满天寒地冻的环境,于是准备向A国的下部征战来获得更大的领土。 A国是一个M*N的矩阵,其中某些地方是城镇,某些地方是高山深涧无人居住。lanzerb把自己的部落分成若干支军队,他们约定: 1. 每支军队可以从任意一个城镇出发,并只能从上往向下征战,不能回头。途中只能经过城镇,不能经过高山深涧。 2. 如果某个城镇被某支军队到过,则其他军队不能再去那个城镇了。 3. 每支军队都可以在任意一个城镇停止征战。 4. 所有军队都很奇怪,他们走的方法有点像国际象棋中的马。不过马每次只能走1*2的路线,而他们只能走R*C的路线。 lanzerb的野心使得他的目标是统一全国,但是兵力的限制使得他们在配备人手时力不从心。假设他们每支军队都能顺利占领这支军队经过的所有城镇,请你帮lanzerb算算至少要多少支军队才能完成统一全国的大业。

Input

第一行包含4个整数M、N、R、C,意义见问题描述。接下来M行每行一个长度为N的字符串。如果某个字符是'.',表示这个地方是城镇;如果这个字符时'x',表示这个地方是高山深涧。

Output

输出一个整数,表示最少的军队个数。

Sample Input

3 3 1 2
...
.x.
...

Sample Output

4

HINT

 

题意

 

题解:

最小路径覆盖问题

用总数减去最大流就好了

代码:

//qscqesze
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <bitset>
#include <vector>
#include <sstream>
#include <queue>
#include <typeinfo>
#include <fstream>
#include <map>
#include <stack>
typedef long long ll;
using namespace std;
//freopen("D.in","r",stdin);
//freopen("D.out","w",stdout);
#define sspeed ios_base::sync_with_stdio(0);cin.tie(0)
#define maxn 200500
#define mod 1001
#define eps 1e-9
#define pi 3.1415926
int Num;
//const int inf=0x7fffffff;
const ll inf=999999999;
inline ll read()
{ll x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
//*************************************************************************************namespace NetFlow
{const int MAXN=100000,MAXM=100000,inf=1e9;struct Edge{int v,c,f,nx;Edge() {}Edge(int v,int c,int f,int nx):v(v),c(c),f(f),nx(nx) {}} E[MAXM];int G[MAXN],cur[MAXN],pre[MAXN],dis[MAXN],gap[MAXN],N,sz;void init(int _n){N=_n,sz=0; memset(G,-1,sizeof(G[0])*N);}void link(int u,int v,int c){E[sz]=Edge(v,c,0,G[u]); G[u]=sz++;E[sz]=Edge(u,0,0,G[v]); G[v]=sz++;}int ISAP(int S,int T){//S -> Tint maxflow=0,aug=inf,flag=false,u,v;for (int i=0;i<N;++i)cur[i]=G[i],gap[i]=dis[i]=0;for (gap[S]=N,u=pre[S]=S;dis[S]<N;flag=false){for (int &it=cur[u];~it;it=E[it].nx){if (E[it].c>E[it].f&&dis[u]==dis[v=E[it].v]+1){if (aug>E[it].c-E[it].f) aug=E[it].c-E[it].f;pre[v]=u,u=v; flag=true;if (u==T){for (maxflow+=aug;u!=S;){E[cur[u=pre[u]]].f+=aug;E[cur[u]^1].f-=aug;}aug=inf;}break;}}if (flag) continue;int mx=N;for (int it=G[u];~it;it=E[it].nx){if (E[it].c>E[it].f&&dis[E[it].v]<mx){mx=dis[E[it].v]; cur[u]=it;}}if ((--gap[dis[u]])==0) break;++gap[dis[u]=mx+1]; u=pre[u];}return maxflow;}bool bfs(int S,int T){static int Q[MAXN]; memset(dis,-1,sizeof(dis[0])*N);dis[S]=0; Q[0]=S;for (int h=0,t=1,u,v,it;h<t;++h){for (u=Q[h],it=G[u];~it;it=E[it].nx){if (dis[v=E[it].v]==-1&&E[it].c>E[it].f){dis[v]=dis[u]+1; Q[t++]=v;}}}return dis[T]!=-1;}int dfs(int u,int T,int low){if (u==T) return low;int ret=0,tmp,v;for (int &it=cur[u];~it&&ret<low;it=E[it].nx){if (dis[v=E[it].v]==dis[u]+1&&E[it].c>E[it].f){if (tmp=dfs(v,T,min(low-ret,E[it].c-E[it].f))){ret+=tmp; E[it].f+=tmp; E[it^1].f-=tmp;}}}if (!ret) dis[u]=-1; return ret;}int dinic(int S,int T){int maxflow=0,tmp;while (bfs(S,T)){memcpy(cur,G,sizeof(G[0])*N);while (tmp=dfs(S,T,inf)) maxflow+=tmp;}return maxflow;}
}
using namespace NetFlow;string s[100];
int M[52][52][3];
int tot=1;
int get_id(int x,int y,int z)
{if(M[x][y][z])return M[x][y][z];else return M[x][y][z]=tot++;
}
int n,m,r,c;
int judge(int x,int y)
{if(x>=n||x<0)return 0;if(y>=m||y<0)return 0;if(s[x][y]=='.')return 1;return 0;
}
int main()
{init(100000);n=read(),m=read(),c=read(),r=read();for(int i=0;i<n;i++)cin>>s[i];int ans = 0;for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(s[i][j]=='.'){ans++;link(get_id(0,0,0),get_id(i,j,1),1);link(get_id(i,j,2),get_id(1,0,0),1);int x,y;x=i+r;y=j+c;if(judge(x,y))link(get_id(i,j,1),get_id(x,y,2),1);x=i+r;y=j-c;if(judge(x,y))link(get_id(i,j,1),get_id(x,y,2),1);x=i+c;y=j+r;if(judge(x,y))link(get_id(i,j,1),get_id(x,y,2),1);x=i+c;y=j-r;if(judge(x,y))link(get_id(i,j,1),get_id(x,y,2),1);}}}int K = dinic(get_id(0,0,0),get_id(1,0,0));printf("%d\n",ans - K);
}

 

转载于:https://www.cnblogs.com/qscqesze/p/4792682.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/491825.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数字图像处理-0.绪论

一、图像处理的概念 图像&#xff1a;是对客观物体的一种相似性的生动的写真或描述。 可见的图像&#xff1a;照片、图与画 、投影 /不可见光&#xff1a;不可见光成像&#xff08;红外、紫外等&#xff09;、数学模型的生成。 图像的类别&#xff1a;彩色和非彩色&#xff…

window下打开tensorboard

首先通过一个简单的 TensorFlow 程序&#xff0c;在这个程序中完成了TensorBoard 日志输出的功能。 import tensorflow as tfa tf.constant([1, 2, 3], nameinput1) b tf.constant([4, 5, 6], nameinput2) c tf.add_n([a, b], nameadd)with tf.Session() as sess:sess.run(…

数字图像处理-1.图像获取

一、图像数字化 原理&#xff1a;图像数字化是将一幅画面转化成计算机能处理的形式——数字图像的过程。 将一幅图像分割成如图的一个个小区域&#xff08;像元或像素&#xff09;&#xff0c;并将各小区域灰度用整数表示&#xff0c;形成一幅点阵式的数字图像。 包括采样和量…

刘炽平:腾讯要以生态方式进行开放,不做“颠覆者”

“我们希望做生态的‘共建者’&#xff0c;成为大家的‘帮助者’&#xff0c;而不是传统互联网行业的颠覆者。”在2019腾讯全球数字生态大会上&#xff0c;腾讯公司总裁刘炽平这样说道。本次大会由云南省人民政府指导&#xff0c;云南省文化和旅游厅、昆明市人民政府、腾讯公司…

iOS 翻译-UIWebView的基本简介-官方文档翻译

继承关系&#xff1a;NSObject-UIResponder-UIView-UIWebView 遵循&#xff1a;NSCoding NSObject UIAppearance UIAppearanceContainer UICoordinateSpace UIDynamicItem UIScrollViewDelegate UITraitEnvironment 你可以使用UIWebView类嵌入网页内容在您的应用程序。这样做&a…

np.squeeze()

作用&#xff1a;从数组的形状中删除单维条目&#xff0c;即把shape中为1的维度去掉 例子&#xff1a; import numpy as npa np.array([[1], [2], [3]]) print(a) print(a.shape) 输出&#xff1a; [[1] [2] [3]] shape:(3, 1) 应用squeeze()后&#xff1a; a1 np.sq…

数字图像处理--2.图像变换

一、图像的傅里叶变换 目的与用途 图像变换的目的&#xff1a; 使得图像处理问题简化&#xff1b;有利于图像特征提取&#xff1b;&#xff08;我们知道特征提取的目的是为了对影像进行分析&#xff0c;根据特征从影像中提取目标等有用信息&#xff0c;特征提取对影像中提取…

《腾讯数字生活报告2019》发布,互联网时代新马斯洛需求金字塔预示什么?

来源&#xff1a;腾讯研究院5月22日&#xff0c;腾讯研究院、腾讯应用宝、腾讯开放平台联合出品的《腾讯数字生活报告2019》在腾讯全球数字生态大会应用生态主题论坛上发布&#xff0c;报告从生存、关系、发展三个层级解读了大众数字生活版图中的新趋势及核心洞察。透过这份数字…

0909论编译原理

编译原理学什么&#xff1f; 我觉得学习编译原理可以帮助自己更加深层次的理解程序语言和内部机制&#xff0c;学习一种新的解决问题的方法&#xff0c;从各种算法中可以得到启发&#xff0c;更加深入的了解计算机思想&#xff0c;进一步培养计算机思维。 为什么学编译原理&…

python实现KNN算法

inX是待测样本&#xff0c;dataSet是训练样本集&#xff0c;labels是训练样本集的标签集 &#xff0c;k是近邻数 from numpy import * import operatordef knn(inX, dataSet, labels, k): m dataSet.shape[0] # 获得训练样本的样本个数diffMat tile(inX, (m,1)) - dataSet …

数字图像处理--3.图像增强

一、图像增强的点运算 图像增强&#xff1a;采用一系列技术&#xff0c;改善图像的视觉效果&#xff0c;或者将图像转换成一种更适合于人或者机器进行分析和处理的形式。 图像增强方法&#xff1a;1.空间域增强&#xff1a;直接对图像各像素进行处理&#xff1b;2.对图像进行…

腾讯姚星:两大科技矩阵助力两张网,立志攻克通用人工智能和多模态问题

来源&#xff1a;腾讯AI实验室5月21日&#xff0c;2019腾讯全球数字生态大会在昆明滇池国际会展中心开幕。本次大会由云南省人民政府指导&#xff0c;云南省文化和旅游厅、昆明市人民政府、腾讯公司共同主办&#xff0c;是腾讯战略升级后&#xff0c;整合互联网数字经济峰会、云…

nginx的学习(配置文件,以及部署的疑惑)

1、在windows下安装nginx&#xff0c;解压之后&#xff0c;在此目录下&#xff0c;dos进去&#xff0c;start nginx 2、配置文件&#xff1a; http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeou…

python将数据集分成训练样本和类标签

这里假设 类标签为largeDoses, smallDoses, didntLike三类&#xff0c;假设训练样本有三个特征属性&#xff0c;类标签放在数据集的最后一列 import numpy as npdef file2matrix(filename): # filename是文件保存地址love_dictionary {largeDoses:3, smallDoses:2, didntLik…

图像处理-5

1.图像的数学变换 空间域&#xff1a;图像的代数运算和几何运算都是利用对输入图像进行加工而得到输出图像 转换空间&#xff1a;最典型的有离散傅里叶变换将原定义在图像空间的图像以某种形式转换到另外一些空间&#xff0c;并利用输入图像在这些空间的特有性质有效而快速地…

量子算法、DNA计算与后经典计算时代

来源&#xff1a;资本实验室二进制与伟大的计算机相结合&#xff0c;推动人类进入了信息化时代。在这个基于物质世界的&#xff0c;由0和1构成的新世界中&#xff0c;我们依靠算法和电子技术不断解决了大量曾经无法解决的问题。然而&#xff0c;好奇的人类总是善于提出新的、更…

Oracle Comment 获取并修改表或字段注释

select * from dba_tables where owner DINGYINGSI; select * from user_col_comments where table_name STUDENT;comment on table "STUDENT" is 这是学生信息表; comment on column STUDENT.ID is 这是一个学生的ID;注意表名的大小写 转载于:https://www.cnblogs…

使用Matplotlib创建散点图

假设data是m行两列的训练样本&#xff0c;labels是m行一列的类标签&#xff0c;类标签一共有3类&#xff0c;分别用1、2、3表示&#xff0c;现将data用散点图表示出来&#xff0c;且不同类的样本有不同的颜色&#xff1a; import matplotlib.pyplot as pltfig plt.figure() a…

数字图像-6空域滤波

空域处理 基本概念&#xff1a; 理论基础——线性系统响应&#xff1a;卷积理论 卷积的离散表达式&#xff0c;基本上可以理解为模板运算的数学表达式 由此&#xff0c;卷积的冲击响应函数h(x,y)&#xff0c;称为空域卷积模板。 空域滤波及滤波器的定义 使用空域模板进行的…

特斯拉烧,特斯拉烧完蔚来烧

来源&#xff1a;36氪最关键的问题还是在电池。又一台蔚来汽车自燃了。5月16日&#xff0c;上海嘉定一个小区的地下车库&#xff0c;一台黑色的蔚来ES8突然冒出大量浓烟。消防人员及时赶到&#xff0c;扑灭烟雾并封锁了现场&#xff0c;才没有引起火灾。根据车主的描述&#xf…