当前位置: 首页 > news >正文

CF37E Trial for Chief 题解

CF37E Trial for Chief

题意:

给定一张 N×MN×MN×M 的网格,初始全为白色,每次可以把一个相同颜色的四连通区域染成白色或黑色,求最少的染色次数得到给定的图案。N,M≤50N,M\leq 50N,M50

思路:

“你玩过画图吗?就是那种上课无聊的时候点点点然后整个图都是一个颜色了。”
就像这句话一样!我们想到可以固定一个点一直点,这样一定是最小的(手动模拟一下即可)。发现数据范围很小,所以固定的这个点可以枚举,那如何求最小值呢,向不相同的颜色连边权为 111 的边,相同颜色连边权为 000 的边。跑最短路,走到每个点的最短路的最大值就是这个点所需的费用。找到最小费用便是答案了。

code:

#include<bits/stdc++.h>
using namespace std;
#define ll long long
const int INF=0x3f3f3f3f;
const int N=52;
const int M=10005;
int n,m;
string s;
int mp[N][N];
int dx[5]={1,-1,0,0};
int dy[5]={0,0,1,-1};
struct node{int w,nxt,v;
}e[M<<1];
int h[M],tot;
int ans;
int vis[M],dis[M];
void spfa(int s){for(int i=0;i<=tot+5;i++){dis[i]=INF;vis[i]=0;}queue<int> q;q.push(s);dis[s]=vis[s]=1;while(!q.empty()){int u=q.front();q.pop();for(int i=h[u];~i;i=e[i].nxt){int v=e[i].v,w=e[i].w;if(dis[v]>dis[u]+w){dis[v]=dis[u]+w;if(!vis[v]){vis[v]=1;q.push(v);}}}vis[u]=0;}int anss=0;for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){if(!mp[i][j]) anss=max(anss,dis[(i-1)*m+j]);}}ans=min(ans,anss);
}
void add(int x,int y,int w){e[++tot].nxt=h[x];e[tot].v=y;e[tot].w=w;h[x]=tot;
}
int main(){ans=INF;memset(h,-1,sizeof h);scanf("%d%d",&n,&m);for(int i=1;i<=n;i++){cin>>s;for(int j=0;j<m;j++){mp[i][j+1]=((s[j]=='W')?1:0);}}for(int i=1;i<=n;i++){for(int j=1;j<=m;j++){for(int k=0;k<4;k++){int x=i+dx[k],y=j+dy[k];if(x<1||y<1||x>n||y>m) continue;add((i-1)*m+j,(x-1)*m+y,(mp[x][y]!=mp[i][j]));}}}for(int i=1;i<=n*m;i++){spfa(i);}printf("%d\n",ans);return 0;
}

文章转载自:
http://belgae.kjawz.cn
http://arrogation.kjawz.cn
http://bumiputraization.kjawz.cn
http://bung.kjawz.cn
http://adiaphorist.kjawz.cn
http://amatory.kjawz.cn
http://apoise.kjawz.cn
http://candlepin.kjawz.cn
http://bename.kjawz.cn
http://animosity.kjawz.cn
http://arras.kjawz.cn
http://baculiform.kjawz.cn
http://aerobatic.kjawz.cn
http://castle.kjawz.cn
http://anglomaniac.kjawz.cn
http://acalculia.kjawz.cn
http://bibliomaniac.kjawz.cn
http://amos.kjawz.cn
http://acridity.kjawz.cn
http://badlands.kjawz.cn
http://choke.kjawz.cn
http://aestilignosa.kjawz.cn
http://anisocoria.kjawz.cn
http://blundering.kjawz.cn
http://amble.kjawz.cn
http://articulatory.kjawz.cn
http://chlorinous.kjawz.cn
http://caucasian.kjawz.cn
http://binomial.kjawz.cn
http://aetiological.kjawz.cn
http://www.dtcms.com/a/280693.html

相关文章:

  • 青年科学基金项目答辩PPT模板 | 杰青优青ppt设计制作美化 | WordinPPT
  • uni-app 学习笔记:Vuex 持久化数据
  • 【C++】神奇的AVL树
  • Java单元测试JUnit
  • 使用 Java 获取 PDF 页面信息(页数、尺寸、旋转角度、方向、标签与边框)
  • 已知均数与标准差,如何生成一组正态分布数据?
  • EPLAN 电气制图(九):直流电源绘制+端子排绘制
  • 线程(二) linux 互斥
  • JVM——有哪些常见的垃圾收集器
  • Props
  • 时序数据库与AI的融合:智能时代的数据基石
  • 027_国际化与本地化
  • Spring应用抛出NoHandlerFoundException、全局异常处理、日志级别
  • FreeRTOS学习笔记——移植说明、任务创建
  • 【Ubuntu22.04】repo安装方法
  • Linux715 磁盘管理:逻辑卷
  • 聊聊MySQL中的buffer pool
  • Spring Boot目录变文件夹?3步解决!
  • Unity Editor下拉框,支持搜索,多层级
  • BGP服务器和多线服务器的不同之处
  • Python初学者笔记第十三期 -- (常用内置函数)
  • 原点安全签约金网络数科,共建一体化数据安全防护体系
  • Docker 镜像(Image)常用命令总结
  • ASP .NET Core 8结合JWT轻松实现身份验证和授权
  • CMake基础:覆盖项目开发的五大配套工具
  • LLM面试题及讲解 4
  • VSCode同时支持Vue2和Vue3开发的插件指南
  • 【编程】-环形缓冲区
  • 安全参綉25暑假第一次作业
  • 超详细 anji-captcha滑块验证uniapp微信小程序前端组件