如果固定了一个中心,那么只需要考虑从它开始最远染到的那些点究竟染了几次。

上下左右不同的点连1边,相同的连0边,跑单源最短路就可以啦。

lyd讲的是统计到最远黑点+1的最小值,但是#58数据全是白点,嗯...应该这样考虑,黑点+1,白点不+1。

一开始数组开太大,导致memset时间暴增,没认真估计数据范围呢。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<queue>
#define id(x,y) (((x)-1)*m+(y))
using namespace std; const int MAXN=; inline int rd() {
int ret=,f=;
char c;
while(c=getchar(),!isdigit(c))f=c=='-'?-:;
while(isdigit(c))ret=ret*+c-'',c=getchar();
return ret*f;
} int n,m; struct Edge {
int next,to,w;
} e[MAXN<<];
int ecnt,head[MAXN];
inline void add(int x,int y,int w) {
// printf("Connect:(%d,%d) with (%d,%d) using %d\n",x/(m+1),x%(m+1),y/(m+1),y%(m+1),w);
e[++ecnt].next = head[x];
e[ecnt].to = y;
e[ecnt].w = w;
head[x] = ecnt;
// e[++ecnt].next = head[y];
// e[ecnt].to =x;
// e[ecnt].w = w;
// head[y] = ecnt;
} char s[][]; int dx[]= {,,-,};
int dy[]= {,,,-}; int dis[MAXN],inq[MAXN];
queue<int> Q; int cnt=; int spfa(int st) {
memset(dis,0x3f,sizeof(dis));
int ret=;
dis[st]=;
Q.push(st);
inq[st]=;
while(!Q.empty()) {
int top=Q.front();
Q.pop();
inq[top]=;
for(int i=head[top]; i; i=e[i].next) {
int v=e[i].to;
if(dis[v]>dis[top]+e[i].w) {
dis[v]=dis[top]+e[i].w;
if(!inq[v]) Q.push(v),inq[v]=;
}
}
}
for(int i=;i<=n;i++) for(int j=;j<=m;j++)
if(s[i][j]=='B') ret=max(ret,+dis[id(i,j)]);
else ret=max(ret,dis[id(i,j)]);
return ret;
} int main() {
n=rd();
m=rd();
for(int i=; i<=n; i++) {
scanf("%s",s[i]+);
}
int x,y;
for(int i=; i<=n; i++) {
for(int j=; j<=m; j++) {
for(int k=; k<=; k++) {
x=i+dx[k],y=j+dy[k];
if(x<||x>n||y<||y>m) continue;
if(s[x][y]==s[i][j]) add(id(i,j),id(x,y),);
else add(id(i,j),id(x,y),);
}
}
}
int ans=<<;
for(int i=; i<=n; i++) {
for(int j=; j<=m; j++) {
ans=min(ans,spfa(id(i,j)));
}
}
printf("%d",ans);
cout<<endl;
return ;
}

[CF] 37 E. Trial for Chief的更多相关文章

  1. codeforces 37 E. Trial for Chief【spfa】

    想象成一层一层的染,所以相邻的两个格子连边,边权同色为0异色为1,然后答案就是某个格子到距离它最远得黑格子的最短距离的最小值 注意特判掉不需要染色的情况 #include<iostream> ...

  2. CodeForces 37E Trial for Chief

    Time Limit: 2000MS   Memory Limit: 262144KB   64bit IO Format: %I64d & %I64u Description Having ...

  3. CF37E Trial for Chief(最短路)

    题意 题意是给你一张 NMNMNM 的图,每个点有黑色和白色,初始全为白色,每次可以把一个相同颜色的连续区域染色,求最少的染色次数:(n,m<=50) 题解 转化为最短路.对于每一个点与它相邻的 ...

  4. Noip前的大抱佛脚----赛前任务

    赛前任务 tags:任务清单 前言 现在xzy太弱了,而且他最近越来越弱了,天天被爆踩,天天被爆踩 题单不会在作业部落发布,所以可(yi)能(ding)会不及时更新 省选前的练习莫名其妙地成为了Noi ...

  5. NOIP前的水题记录

    CF147B Smile House 二分+矩阵快速幂,注意一下储存矩阵相乘结果的矩阵,初始化时,a[i][i]=-inf(而其他都可以a[i][i]=0,为了保证答案的可二分性). CF715B C ...

  6. mahout安装和测试

    Mahout 是 Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发者更加方便快捷地创建智能应用程序.Apac ...

  7. 【codeforces】【比赛题解】#920 Educational CF Round 37

    [A]浇花 题意: 一个线段上每个整点都有花,有的点有自动浇花的喷水器,有问几秒能浇完所有的花. 题解: 大模拟 #include<cstdio> #include<cstring& ...

  8. Postfix之mail.cf

    1.# 2. 3.vi /etc/postfix/main.cf #vi编辑postfix配置文件 4.#找到如下配置项酌情修改 5.###### 6.myhostname =  mail.yourd ...

  9. CF #356 div1 A. Bear and Prime 100

    题目链接:http://codeforces.com/contest/679/problem/A CF有史以来第一次出现交互式的题目,大致意思为选择2到100中某一个数字作为隐藏数,你可以询问最多20 ...

随机推荐

  1. 北京师范大学第十四届ACM决赛-重现赛 F:Training Plan(DP)

    传送门 题意 将n个数分成m个集合,\(V_i表示max(x-y),x,y∈第\)i个集合,\(求minΣV_i\) 分析 我们先对难度排序,令dp[i][j]表示前i个数分成j个集合的最小费用 转移 ...

  2. noip 2012 Day2 T2 借教室

    一.暴力简述 甩链接.jpeg 首先我们不难看出,这道题————并不是一道多难的题,因为显然,第一眼看题目时便很容易地想到暴力如何打:枚举每一种订单,然后针对每一种订单,对区间内的每一天进行修改(做减 ...

  3. Luogu P1736 创意吃鱼法【dp】By cellur925

    题目传送门 题意:给出一个01矩阵,找出一条对角线,使得对角线上的元素都为1,而对角线所在矩阵其他元素均为0,使得这样的对角线最长. 状态:$f[i][j]$表示以($i$,$j$)为对角线端点的最长 ...

  4. Ubuntu 18.04 LTS 常见问题解决 2

    1 每次重启后都有system program problem detected sudo gedit /etc/default/apport 然后将打开的文件中的enabled=1改为0,原因暂时不 ...

  5. PAT 1035 插入与归并(25)

    原题:https://pintia.cn/problem-sets/994805260223102976/problems/994805286714327040传送门: 根据维基百科的定义: 插入排序 ...

  6. Brush (III) LightOJ - 1017

    Brush (III) LightOJ - 1017 题意:有一些点,每刷一次可以将纵坐标在区间(y1,y1+w)范围内的所有点刷光,y1为任何实数.最多能刷k次,求最多共能刷掉几个点. 先将点按照纵 ...

  7. 水题 Codeforces Round #303 (Div. 2) D. Queue

    题目传送门 /* 比C还水... */ #include <cstdio> #include <algorithm> #include <cstring> #inc ...

  8. Sereja and Brackets(括号匹配)

    Description Sereja has a bracket sequence s1, s2, ..., sn, or, in other words, a string s of length  ...

  9. 分区表,磁盘概念和parted的使用

    分区表,磁盘概念和parted的使用 登录陌生系统首先要做的事: 个人认为,首先得知道Linux版本的什么:cat /etc/issue df:查看磁盘的分区和数据的分配情况,类型(NFS,ext4. ...

  10. 2018微软实习笔试一道dp题目总结

    题意大概是说在一维数轴上起点和终点的距离是d,现在我们要从起点走到终点.每走一个单位长度消耗一个单位能量,初始时有K单位能量.同时在起点和终点之间分布一些加油站a1,a2,...an,给你加油站数量. ...