小马智行杯 E黑白大陆

news/2024/10/22 11:29:29/

                                                小马智行杯 E黑白大陆

PTA | 程序设计类实验辅助教学平台

思路:因为数据范围比较小,所以我们可以尝试一些暴力做法,首先在一个联通块内的一定可以一起操作,所以我们可以先把每个连通块遍历出来,然后可以建一个图,把每个点跟相邻的四个点连边,如果两个点在不同的联通块上,那么,假如说我从某个点假设为x,y开始进行变换,那么把整个图变为相同的,那么需要的步骤就是到id[x][y]最远的点的距离,但是如果最后全为黑色还需要多出一步来变为白色,所以我们考虑建图之后对于每个点来说从当前这个点开始变换,把整个图变为白色所需要的最小步骤,最后对所有的点取min

#include<iostream>
#include<cstring>
#include<string>
#include<sstream>
#include<cmath>
#include<cstdio>
#include<algorithm>
#include<queue>
#include<map>
#include<stack>
#include<vector> 
#include<set>
#include<unordered_map>
#include<ctime>
#include<cstdlib>
#define fi first
#define se second
using namespace std;
typedef long long ll;
typedef double db;
typedef pair<int,int> PII;
typedef pair<int,pair<int,int> > PIII;
const double eps=1e-7;
const int N=5e5+7 ,M=5e5+7, INF=0x3f3f3f3f,mod=1e9+7;
const long long int llINF=0x3f3f3f3f3f3f3f3f;
inline ll read() {ll x=0,f=1;char c=getchar();while(c<'0'||c>'9') {if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9') {x=(ll)x*10+c-'0';c=getchar();} return x*f;}
inline void write(ll x) {if(x < 0) {putchar('-'); x = -x;}if(x >= 10) write(x / 10);putchar(x % 10 + '0');}
inline void write(ll x,char ch) {write(x);putchar(ch);}
void stin() {freopen("in_put.txt","r",stdin);freopen("my_out_put.txt","w",stdout);}
bool cmp0(int a,int b) {return a>b;}
template<typename T> T gcd(T a,T b) {return b==0?a:gcd(b,a%b);}
template<typename T> T lcm(T a,T b) {return a*b/gcd(a,b);}
void hack() {printf("\n----------------------------------\n");}int T,hackT;
int n,m,k;
int w[60][60];
int id[60][60];
int h[2510],e[M],ne[M],idx;
int dx[]={-1,1,0,0},dy[]={0,0,-1,1};
int dist[2510];
bool st[2510];
bool stt[2510];void add(int a,int b) {e[idx]=b,ne[idx]=h[a],h[a]=idx++;
}void dfs(int x,int y,int type,int timestemp) {id[x][y]=timestemp;for(int i=0;i<4;i++) {int tx=x+dx[i],ty=y+dy[i];if(id[tx][ty]) continue;if(w[tx][ty]!=type) continue;if(tx<1||tx>n||ty<1||ty>m) continue;dfs(tx,ty,type,timestemp);}
}int dijkstra(int u,int timestemp) {memset(dist,0x3f,sizeof dist);memset(st,false,sizeof st);dist[u]=0;priority_queue<PII,vector<PII>,greater<PII> > q;q.push({dist[u],u});while(q.size()) {auto it=q.top();q.pop();int ver=it.se;if(st[ver]) continue;st[ver]=true;for(int i=h[ver];i!=-1;i=ne[i]) {int j=e[i];if(dist[j]>dist[ver]+1) {dist[j]=dist[ver]+1;q.push({dist[j],j});}}}int res=0;for(int i=1;i<=timestemp;i++) res=max(res,dist[i]);if(stt[u]) {if(res%2==0) res++; }else {if(res%2==1) res++;}return res;
}void solve() {n=read(),m=read();memset(h,-1,sizeof h);for(int i=1;i<=n;i++) {for(int j=1;j<=m;j++) {w[i][j]=read();}}int timestemp=0;for(int i=1;i<=n;i++) {for(int j=1;j<=m;j++) {if(!id[i][j]) {dfs(i,j,w[i][j],++timestemp);if(w[i][j]) stt[timestemp]=true;}}}for(int i=1;i<=n;i++) {for(int j=1;j<=m;j++) {for(int k=0;k<4;k++) {int tx=i+dx[k],ty=j+dy[k];if(tx<1||tx>n||ty<1||ty>m) continue;if(id[i][j]==id[tx][ty]) continue;add(id[i][j],id[tx][ty]);add(id[tx][ty],id[i][j]);}}}int res=INF;for(int i=1;i<=timestemp;i++) res=min(res,dijkstra(i,timestemp));printf("%d\n",res); 
}   int main() {// init();// stin();// scanf("%d",&T);T=1; while(T--) hackT++,solve();return 0;       
}          


http://www.ppmy.cn/news/743561.html

相关文章

喊麦话筒测试软件,美国AUDIX TM1 PLUS 声学测试话筒 (带校正圈、防风罩、麦夹)

QQ&#xff1a;854356739 Audix公布新的TM1是一款苗条&#xff0c;6mm的Pre-polarized电容麦克风&#xff0c;用于测试和测量&#xff0c;实时分析仪声学测量的应用&#xff0c;还包括一些其他的声音控制设备的使用。TM1的特征是全指向两级格局&#xff0c;一个20-25KHz的平坦的…

web安全php基础_echo,print,print_r,var_dump 的用处及区别

echo & print 在 PHP 中有两个基本的输出方式&#xff1a; echo 和 print。 PHP echo 语句 echo 是一个语言结构&#xff0c;使用的时候可以不用加括号&#xff0c;也可以加上括号&#xff1a; echo 或 echo()。 显示字符串 下面的实例演示了如何使用 echo 命令输出字…

德国马牌联手途虎打造电动车知识课堂,“小马哥快充站”南京开讲

自6月19日启动以来&#xff0c;由德国马牌轮胎发起的全国巡回知识课堂“小马哥快充站”系列活动已在一月之内陆续走过上海、北京、合肥三城。针对三地电动汽车出行痛点&#xff0c;“小马哥快充站”邀请汽车行业资深专家、德国马牌轮胎培训师与汽车媒体担当讲师&#xff0c;为电…

微信小程序配置绝对路径引入文件

微信小程序默认使用相对路径引入文件 在多层文件夹时需要很长前缀 const { ClueApi } require(../../../../utils/api.js) 配置方法 在app.json里面配置 "resolveAlias": { "/*": "/*" } 在页面使用 const { ClueApi } require("/utils/…

解决vmWare ESXI 7.3报错,客户机操作系统已禁用 CPU。请关闭或重置虚拟机(ESXI使用遇到问题解决记录文持续使用持续更新)

一&#xff1a;分析客户机操作系统已禁用 CPU" 这个错误通常是由以下原因之一引起的&#xff1a; 1. 虚拟机配置不正确&#xff1a;可能是您在虚拟机配置中选择了不受支持的 CPU 类型或功能。某些操作系统可能需要特定的 CPU 功能才能正常运行。如果您的虚拟机配置与操作…

关于《灌篮高手》

刚开始看的时候是在公司电脑上的笔记本&#xff0c;因为声音很嘈杂再加上画风远没有火影跟海贼的美感实在不是太喜欢&#xff0c;并且觉得剧情偏幼稚&#xff0c;所以并没有带来太多的喜欢。可还是不知道什么原因竟然连续看了近十集&#xff0c;可能不排除我最近剧荒的原因。后…

web网页设计期末课程大作业:红色中国文化主题网站设计——灌篮高手(4页)HTML+CSS

HTML实例网页代码, 本实例适合于初学HTML的同学。该实例里面有设置了css的样式设置&#xff0c;有div的样式格局&#xff0c;这个实例比较全面&#xff0c;有助于同学的学习,本文将介绍如何通过从头开始设计个人网站并将其转换为代码的过程来实践设计。 ⚽精彩专栏推荐&#x1…