洛谷题目链接:奶牛美容

题目描述

输入输出格式

输入格式:

输出格式:

输入输出样例

输入样例#1:

6 16
................
..XXXX....XXX...
...XXXX....XX...
.XXXX......XXX..
........XXXXX...
..XXX....XXX....

输出样例#1:

4

简述一下题意:给出一个矩阵,矩阵上有三个点(??),要求出最少改变几个点才能使这三个点变成一个点.

显然我们可以求出每两个点的距离,答案就是另外两个点到这个点的距离之和.

然而这样是有问题的,比如这样:

...X.....X...
.............
......X......

这样这些点并不需要到连同一个点,所以在之前答案的基础上再枚举一遍三个点到同一个位置的距离之和能不能更新答案就好了.

步骤:

  1. 广搜求出每个位置所属的点.
  2. 深搜求出一个点到每个位置的最短长度.
  3. 对到同一点和三点再外面连通的情况取最小值.
  4. 最后答案要-2(因为在计算距离时是算的连入到一个点的长度,所以连进去的那个格子不要算).
#include<bits/stdc++.h>
using namespace std;
const int N=500+5;
const int inf=2147483647;int n, m, cnt = 0, ans = inf;
char a[N][N];
int col[N][N];
int mn[N][N];
int d[4][N][N];
int mv[]={1,0,-1,0,1};struct node{int x, y;
};bool ok(node nt){if(nt.x < 1 || nt.x > n) return false;if(nt.y < 1 || nt.y > m) return false;if(col[nt.x][nt.y] || a[nt.x][nt.y] != 'X') return false;return true;
}void bfs(int x,int y){cnt++; queue <node> q;q.push((node){x,y}); col[x][y] = cnt;node now, nt;while(!q.empty()){now = q.front(); q.pop();for(int i=0;i<4;i++){nt.x = now.x+mv[i]; nt.y = now.y+mv[i+1];if(ok(nt)) col[nt.x][nt.y] = cnt, q.push(nt);}}
}void dfs(int color,int x,int y,int step){if(d[color][x][y] <= step) return;d[color][x][y] = step;int nx, ny;for(int i=0;i<4;i++){nx = x+mv[i], ny = y+mv[i+1];if(nx>=1 && nx<=n && ny>=1 && ny<=m)dfs(color,nx,ny,step+1);}
}int main(){//freopen("war.in","r",stdin);//freopen("war.out","w",stdout);char ch; cin >> n >> m;for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)cin >> a[i][j];for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(!col[i][j] && a[i][j] == 'X') bfs(i,j);memset(d,127/3,sizeof(d));for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)if(a[i][j] == 'X') dfs(col[i][j],i,j,0);memset(mn,127/3,sizeof(mn));for(int c=1;c<=3;c++)for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)mn[col[i][j]][c] = mn[c][col[i][j]] = min(mn[c][col[i][j]],d[c][i][j]);ans = min(mn[1][2]+mn[2][3],min(mn[1][3]+mn[3][2],mn[3][1]+mn[1][2]));for(int i=1;i<=n;i++)for(int j=1;j<=m;j++)ans = min(ans,d[1][i][j]+d[2][i][j]+d[3][i][j]);printf("%d\n",ans-2);return 0;
}

转载于:https://www.cnblogs.com/BCOI/p/8909970.html

[洛谷P2124] 奶牛美容相关推荐

  1. 奶牛的耳语c语言,洛谷P1296 奶牛的耳语

    题目描述 在你的养牛场,所有的奶牛都养在一排呈直线的牛栏中.一共有 n 头奶牛,其中第 i 头牛在直线上所处的位置可以用一个整数坐标 pi​(0≤pi​≤10^8) 来表示.在无聊的日子里,奶牛们常常 ...

  2. 洛谷 P1843 奶牛晒衣服

    题目背景 熊大妈决定给每个牛宝宝都穿上可爱的婴儿装 . 于是 , 为牛宝宝洗晒衣服就成了很不爽的事情. 题目描述 熊大妈请你帮助完成这个重任 . 洗完衣服后 , 你就要弄干衣服 . 衣服在自然条件下用 ...

  3. 洛谷——P1296 奶牛的耳语

    P1296 奶牛的耳语 题目描述 在你的养牛场,所有的奶牛都养在一排呈直线的牛栏中.一共有 nn 头奶牛,其中第 ii 头牛在直线上所处的位置可以用一个整数坐标 p_i(0\le p_i \le 10 ...

  4. 读数据优化 绝对值函数优化 加速 示范程序 洛谷P2345奶牛集会

    # pragma G++ optimize "O3"//一号加速 #include<cstdio> #include<cctype> #include< ...

  5. 洛谷——P1296 奶牛的耳语(java实现)

    输入格式 第一行包含两个整数 n,dn,d. 第二行包含 nn 个整数,每个整数都是一个坐标 p_ip i ​ ,描述一头奶牛在直线上的位置. 输出格式 一个数,表示养牛场中可以相互交流奶牛的对数. ...

  6. 洛谷 P2345 奶牛集会 解题报告

    P2345 奶牛集会 题目背景 MooFest, 2004 Open 题目描述 约翰的N 头奶牛每年都会参加"哞哞大会".哞哞大会是奶牛界的盛事.集会上的活动很 多,比如堆干草,跨 ...

  7. 洛谷 P1843 奶牛晒衣服 1

    题目背景 熊大妈决定给每个牛宝宝都穿上可爱的婴儿装 . 于是 , 为牛宝宝洗晒衣 服就成了很不爽的事情. 题目描述 熊大妈请你帮助完成这个重任 . 洗完衣服后 , 你就要弄干衣服 . 衣服在 自然条件 ...

  8. luogu P2124 奶牛美容

    嘟嘟嘟 首先数据范围那么小,那么算法也是相当暴力的. 对于一个点(x, y)所属的联通块,预处理出从这个点出发到这个块外的所有点的曼哈顿距离.复杂度O(n4). 然后求答案:最少答案不一定是三个联通块 ...

  9. 洛谷1345 [Usaco5.4]奶牛的电信

    题目描述 农夫约翰的奶牛们喜欢通过电邮保持联系,于是她们建立了一个奶牛电脑网络,以便互相交流.这些机器用如下的方式发送电邮:如果存在一个由c台电脑组成的序列a1,a2,...,a(c),且a1与a2相 ...

最新文章

  1. Self Ogannizing Maps(SOM)自组织映射
  2. 怎么安装python3-如何装python3
  3. javaScript面向对象表示
  4. 谷歌Android运用商铺下架染辣手机软件
  5. 诚安聚立总裁刘志军:对标三大征信局与FICO 坚持风控能力输出
  6. Java中常见的5种WEB服务器介绍
  7. 【Spring学习】Spring JdbcTemplate之五类方法总结
  8. 华为电视再传消息,海思正在研发相关芯片
  9. 函数使用了堆栈的字节超过_Go语言复习笔记——基本语法三之堆栈与字符串应用...
  10. 公司能否开除长期请病假,无法正常工作的员工?
  11. 天呐,你竟然还在用 try–catch-finally
  12. ue怎么转换html格式,UE编辑器UltraEdit怎么格式化代码
  13. 计算机科学与技术保研好不好,2021年北京邮电大学计算机科学与技术专业保研成功上岸经验指导...
  14. Diligent将收购Steele Compliance Solutions
  15. Ventrilo初学者指南,面向游戏玩家的VoIP应用
  16. “index [hotel/jXLK5MTYTU-jO9WzJNob4w] already exists“
  17. 如何添加企业邮箱?企业邮箱添加成员流程分享
  18. so文件反编译为python代码_【反编译系列】四、反编译so文件(IDA_Pro)
  19. si4463开发总结
  20. 读《互联网创业密码》之感想

热门文章

  1. Bootstrap+PHP fileinput 实现多图上传 这是ajax上传,只能单张单张图片地上传
  2. WinForm绘制直线、曲线、矩形、椭圆、圆弧
  3. [BZOJ1503][NOI2004]郁闷的出纳员 无旋Treap
  4. Hadoop常见面试45问
  5. Java .Net Byte数组存储差异以及解决方法
  6. 给定两个字符串,确定其中一个字符串的字符重新排列后,能否变成另一个字符串...
  7. mysql主从同步单个表实验记录
  8. Hibernate sqlserver 的对象转成 Hibernate mysql 的对象时 需注意
  9. rds_dbsync数据源同步工具
  10. easyUI创建人员树