枚举,$BFS$,连通块缩点。

可以枚举一开始染哪个位置,然后逐层往外染色,看最多需要多少操作次数,也就是算最短距离。连通块缩点之后可以保证是一个黑白相间的图,且每条边的费用均为$1$,$BFS$即可。

#include<cstdio>
#include<queue>
#include<algorithm>
#include<vector>
#include<cstring>
using namespace std;int T,n,m;
char s[50][50];
int Belong[50][50],block,use[50*50];
int dx[]={0,0,-1,1};
int dy[]={1,-1,0,0};int h[50*50];
struct Edge
{int from,to,nx;
}e[100000];
int sz;bool ok(int x,int y)
{if(x>=0&&x<n&&y>=0&&y<m) return 1;return 0;
}void dfs(int x,int y)
{Belong[x][y]=block;if(ok(x-1,y)&&s[x][y]==s[x-1][y]&&Belong[x-1][y]==0) dfs(x-1,y);if(ok(x+1,y)&&s[x][y]==s[x+1][y]&&Belong[x+1][y]==0) dfs(x+1,y);if(ok(x,y-1)&&s[x][y]==s[x][y-1]&&Belong[x][y-1]==0) dfs(x,y-1);if(ok(x,y+1)&&s[x][y]==s[x][y+1]&&Belong[x][y+1]==0) dfs(x,y+1);
}void add(int x,int y)
{e[sz].from=x; e[sz].to=y; e[sz].nx = h[x];h[x]=sz++;
}int main()
{scanf("%d",&T);while(T--){scanf("%d%d",&n,&m);for(int i=0;i<n;i++) scanf("%s",s[i]);memset(Belong,block=0,sizeof Belong);sz=0;memset(h,0xff,sizeof(h));for(int i=0;i<n;i++){for(int j=0;j<m;j++){if(Belong[i][j]) continue;block++; dfs(i,j);}}for(int i=0;i<n;i++){for(int j=0;j<m;j++){for(int k=0;k<4;k++){int x=i+dx[k];int y=j+dy[k];if(!ok(x,y)) continue;if(Belong[i][j]==Belong[x][y]) continue;add(Belong[i][j],Belong[x][y]);}}}int ans=0x7fffffff;for(int i=1;i<=block;i++){memset(use,-1,sizeof(use));int mx=0;use[i]=0;queue<int>q;q.push(i);while(!q.empty()){int x=q.front();q.pop();for(int j=h[x];j!=-1;j=e[j].nx){int y=e[j].to;if(use[y]!=-1) continue;use[y]=use[x]+1;mx=max(use[y],mx);q.push(y);}}ans=min(mx,ans);}printf("%d\n",ans);}return 0;
}

转载于:https://www.cnblogs.com/zufezzt/p/6561761.html

ZOJ 3781 Paint the Grid Reloaded相关推荐

  1. *【ZOJ - 3781】Paint the Grid Reloaded(dfs求连通块缩点,bfs求最短路,建图技巧)

    题干: Leo has a grid with N rows and M columns. All cells are painted with either black or white initi ...

  2. Paint the Grid Reloaded ZOJ - 3781

    点击打开链接 先把每个连通块都当做一个点 然后建图 然后对每一个点bfs得到一个最大深度 再取最小值 这样做是因为这个图是个二分图 每个点与其邻接点的颜色都不一样 #include <bits/ ...

  3. 【ZOJ - 3780】Paint the Grid Again(拓扑排序,图论,证明性质)

    题干: Leo has a grid with N × N cells. He wants to paint each cell with a specific color (either black ...

  4. ZOJ 2747 Paint the Wall(离散化+暴力)题解

    题意:给你一个面,然后涂颜色,问你最后剩多少颜色,每种颜色面积. 思路:第一反应是二维线段树,代码又臭又长,可以做.但是这题暴力+离散化就可以过.可以看到他给的n只有100,也就是说最坏情况下会涂10 ...

  5. ZOJ 3781 最短路(想法好题目)

    题意:       给你一个n*m的矩阵,上面只有两种字符,X或者O,每次可以同时改变相同颜色的一个连通块,上下左右连通才算连通,用最小的步数把这个图弄成全是X或者全是O,题意要是没看懂看下面的样例. ...

  6. The 11th Zhejiang Provincial Collegiate Programming Contest

    Problem Arrangement(状态压缩+递推) http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3777 题意:输入 ...

  7. problem solving automation

    分工一定要明确啊啊啊啊啊 Nero 数据结构  图论   DP   博弈 JayYe  数论   DP   模拟搜索 博弈  wuyiqi 数论  数据结构   图论 字符串 模拟搜索  几何  20 ...

  8. [转]通过创建一个位图的XY Chart来学习Android绘图类Rect,Paint,Bitmap,Canvas(附源码)...

    本文转自:http://www.cnblogs.com/salam/archive/2010/11/10/1873437.html 绘制一个XY集是一种很常见的任务,基于Android平台的绘制很简单 ...

  9. Grid Coloring(AtCoder-2687)

    Problem Description We have a grid with H rows and W columns of squares. Snuke is painting these squ ...

最新文章

  1. 如何使用Leangoo自动生成燃尽图
  2. windows tracert 命令 查看路由表
  3. 为什么不能在SQL拼接模糊匹配符号
  4. 职场中必需修炼的七项意识
  5. Windows下80端口被进程SystemPID=4占用的解决方法
  6. error C2871: #39;std#39; : does not exist or is not a namespace
  7. bzoj 1630 2023: [Usaco2005 Nov]Ant Counting 数蚂蚁(有重复元素的组合数)
  8. MongoDB 之 $关键字 及 $修改器 $set $inc $push $pull $pop MongoDB - 4
  9. 【ENSP模拟器】ENSP问题:Cloud绑定信息只有UDP一个
  10. Flutter 实现一个集各大音乐平台API于一体的音乐播放器APP(一、项目初始化)
  11. PC端微信图片的解密
  12. RT-Thread 01线程调度与管理
  13. 最全zabbix安装部署
  14. fedora11 文泉驿micro-hei字体设置
  15. html 中英文字体自动,用ASP实现中英文字体的自动选择-ASP教程,ASP应用
  16. Flash小游戏:Chat Noir
  17. 2017年前思绪整理
  18. 几个小妙招挑到满意的瓷砖,让你不花冤枉钱
  19. java订单号 github_GitHub - github2zhang/J12306: 12306抢票程序JAVA版
  20. CAS4.1单点登录实现(包含原理配置实现及简易demo)

热门文章

  1. JAVA虚拟机关闭钩子(Shutdown Hook)
  2. 保障IDC安全:分布式HIDS集群架构设计
  3. 苹果机器学习期刊首文:提升合成图像的真实性
  4. OpenCV人脸识别Eigen算法源码分析
  5. 【java】静态代码块
  6. JS Math对象中一些小技巧
  7. SAP HANA中创建与时间相关的数据及Time Attribute View(Gregorian)
  8. Silverlight 5 Beta 新特性预览
  9. VBScript教程-第一章. 脚本的定义和术语
  10. 傻瓜教程:asp.net(c#) 如何配置authentication,完成基于表单的身份验证