【TsinsenA1309】黑白染色題解
題面
試題來源
2012中國國家集訓隊命題答辯
問題描述
你有一個n*m的矩形,一開始所有格子都是白色,然後給出一個目標狀態的矩形,有的地方是白色,有的地方是黑色,你每次可以選擇一個連通塊(四連通塊,且不要求顏色一樣)進行染色操作(染成白色或者黑色)。問最少操作次數。
輸入格式
第一行兩個數n,m表示矩形大小。
接下來n行描述目標狀態,每行m個字元,’W’表示白色,’B’表示黑色。
輸出格式
一行一個整數表示運算元。
樣例輸入
3 3
WBW
BWB
WBW
樣例輸出
2
資料規模和約定
100%的資料n<=50,m<=50
15%的資料n*m<=15
另外15%的資料m=1
題解
分析
設相鄰的點互相通達,異色點距離為1,同色點距離為0
首先應知道,異色兩點距離為奇數,同色兩點距離為偶數
(請自行證明)
那麼設某個點到每個黑點的最短距離中的最遠距離為d
我們有一種最優染色方案(請自行證明最優性)
Step 1:將距離為d以內的點染為黑色
Step 2:將距離為d-1以內的點染為白色
Step 3:將距離為d-2以內的點染為黑色
·
·
·
Step d:將距離為1以內的點染為相應顏色
Step d+1:將距離為0的點(即自己所在區域)染為相應顏色
所以我們只要找到最小的d
輸出
程式碼
#include <cstdio>
#include <iostream>
#include <cstring>
using namespace std;
const int vec[4][2]={{0,1},{0,-1},{1,0},{-1,0}};
int ans,all,tot[2],n,m,i,j,k,dl[2][2501][2],maxn,o;
int map[52][52],dis[52][52];
char s[52];
void dfs(int x,int y)
{
if (map[x][y]) maxn=max(maxn,dis[x][y]);
for (int i=0;i<4;i++)
{
int X=x+vec[i][0],Y=y+vec[i][1];
if (1<=X && X<=n && 1<=Y && Y<=m)
if (map[X][Y]^map[x][y])
if (dis[x][y]+1<dis[X][Y]) dis[X][Y]=dis[x][y]+1,dl[1-o][++tot[1-o]][0]=X,dl[1-o][tot[1-o]][1]=Y;
else;
else
if (dis[x][y]<dis[X][Y]) dis[X][Y]=dis[x][y],dfs(X,Y);
}
}
int check(int x,int y)
{
memset(dis,63,sizeof(dis));
maxn=0;
tot[o]=1;
dl[o][1][0]=x,dl[o][1][1]=y;
dis[x][y]=0;
while (tot[o])
{
tot[1-o]=0;
for (int i=1;i<=tot[o];i++)
dfs(dl[o][i][0],dl[o][i][1]);
o=1-o;
}
return maxn;
}
int main()
{
cin >> n >> m;
for (i=1;i<=n;i++)
{
scanf("%s",s+1);
for (j=1;j<=m;j++)
if (s[j]=='W') all++;
else map[i][j]=1;
}
if (all==n*m)
{
cout << 0;
return 0;
}
ans=1<<30;
for (i=1;i<=n;i++)
for (j=1;j<=m;j++)
ans=min(ans,check(i,j));
cout << ans+1;
return 0;
}
聽你說這是道圖論題???
相關推薦
【TsinsenA1309】黑白染色題解
題面 試題來源 2012中國國家集訓隊命題答辯 問題描述 你有一個n*m的矩形,一開始所有格子都是白色,然後給出一個目標狀態的矩形,有的地方是白色,有的地方是黑色,你每次可以選擇一個連通塊(四連通塊,且不要求顏色一樣)進行染色操作(染成白
【Tsinsen A1039】【bzoj2638】黑白染色 (BFS樹)
efi span clu mat 黑白 cin pan ref clas Descroption 原題鏈接 你有一個\(n*m\)的矩形,一開始所有格子都是白色,然後給出一個目標狀態的矩形,有的地方是白色,有的地方是黑色,你每次可以選擇一個連通塊(四連通塊,且不要求顏色一樣
【bzoj 2303】【Apio2011】方格染色
spa 有關 ... family target blog 思路 getchar() std 題目: http://www.lydsy.com/JudgeOnline/problem.php?id=2303 題解: 很神奇的思路,膜一發大佬http://www.cnbl
【BZOJ3319】黑白樹 並查集
維護 2個 bzoj3 printf highlight 集合 else cst find 【BZOJ3319】黑白樹 Description 給定一棵樹,邊的顏色為黑或白,初始時全部為白色。維護兩個操作:1.查詢u到根路徑上的第一條黑色邊的標號。2.將u到v
【LeetCode】Merge Intervals 題解 利用Comparator進行排序
public 大於 def 沒有 答案 target sta 集合 它的 題目鏈接Merge Intervals /** * Definition for
【codevs1191】數軸染色 並查集
題目描述 Description 在一條數軸上有N個點,分別是1~N。一開始所有的點都被染成黑色。接著 我們進行M次操作,第i次操作將[Li,Ri]這些點染成白色。請輸出每個操作執行後 剩餘黑色點的個數。 輸入描述 Input Description
【筆記】區間染色問題
染色問題題意概要 給定一個長度為n的數字序列,有m次對[Li,Ri]的塗色(或其他修改),求最後的序列 其實這種題最突出的特徵是覆蓋,即後面的操作會覆蓋前面的操作,所以若一段區間被修改多次,取最後一次修改即可; 一:線段樹做法 其實這種題一看,用線
洛谷【P1172】安全逃離題解
get 測評 upload 也有 加粗 end 北方 幫助 情況 題目 題目描述 農夫john最近在研究如果發生重大事故,如何讓農場裏的奶牛逃離問題。他想要確信在緊急情況下,所有的奶牛都有一個安全逃離方案。因為在緊急情況下,奶牛們都會失去觀察和判斷能力,所以最近john一直
【CF1428D】Bouncing Boomerangs 題解
[原題連結](https://codeforces.ml/contest/1428/problem/D) # 題意簡介 ~~毒瘤大模擬~~ 給你一張n*n的圖,在圖上擺有一些物體。從每一列的底端往上扔回旋鏢,每鏢中一個東西,迴旋鏢就會向右轉九十度。**現在我們知道從每列i底端往上鏢時撞上的物體個數ai,
【題解】JSOI2015染色問題
好像這個容斥還是明顯的。一共有三個要求,可以用組合數先滿足一個,再用容斥解決剩下的兩個維。(反正這題資料範圍這麼小,隨便亂搞都可以)。預處理出 \(S[k][i]\) 表示使用 \(k\) 種顏色,至少有 \(i\) 列沒有染色的方案數,容斥可得使用 \(k\) 種顏色染色使得每行每列均被染色的方案數。然
【題解】HAOI2018染色
好坑啊不開心…… 其實這題的想法還是比較簡單粗暴的。題目明示恰好xxx,顯然排除斜率二分這個玩意兒,那麼不就只剩下容斥了嘛…… 令 \(A_{x}\) 為恰好出現了 \(S\) 次的至少有 \(x\) 種的方案數, \({B_{x}}\) 為恰好出現了\(S\) 次的顏色恰好 \(x\) 種的
【題解】黑白奶牛
必須 space code clas john std urn spa 黑白 題目描述 有N只奶牛從左往右排成一行,編號是1至N。這N只奶牛當中,有一些奶牛是黑色的,其余的是白色的。 color[i]表示第i只奶牛的顏色,如果color[
【CQOI2015】多項式題解 (NKOJ3252)
高精度 put sizeof multi brush 亂搞 感謝 https bits 再次感謝Wikipedia提供公式支撐。 題面:Here 這道題其實很水,坑點在高精度。 給定 $F(x)=\sum^n_{k=0}a_kx^k=\sum^n_{k=0}b_k(x
zoj 1610 Count the Colors 【區間覆蓋 求染色段】
ble article 之前 n) 讓我 family define first main Count the Colors Time Limit: 2 Seconds Memory Limit: 65536 KB Painting so
【codeforces】【比賽題解】#849 CF Round #431 (Div.2)
font pen 我們 sca oot can 結束 memset [0 cf的比賽越來越有難度了……至少我做起來是這樣。 先看看題目吧:點我。 這次比賽是北京時間21:35開始的,算是比較良心。 【A】奇數與結束 "奇數從哪裏開始,又在哪裏結束?夢想從何處起航,它們又是否
洛谷 P3374 【模板】樹狀數組 1 題解
數字 pri getchar 說明 using 完全 ace getc ret 此文為博主原創題解,轉載時請通知博主,並把原文鏈接放在正文醒目位置。 題目鏈接:https://www.luogu.org/problem/show?pid=3374 題目描述 如題,
【codeforces】【比賽題解】#854 CF Round #433 (Div.2)
max code turn font tdi 想要 scanf printf clu cf一如既往挺喪 看喪題點我! 【A】分數 Petya是數學迷,特別是有關於分數的數學。最近他學了所謂一個分數被叫做“真分數”當且僅當其分子小於分母,而一個分數被叫做“最簡分數”當且僅當其
【BZOJ4033】[HAOI2015]樹上染色 樹形DP
復雜度 put inline getc 距離 turn bsp 樹形 light 【BZOJ4033】[HAOI2015]樹上染色 Description 有一棵點數為N的樹,樹邊有邊權。給你一個在0~N之內的正整數K,你要在這棵樹中選擇K個點,將其染成黑色,並將其
【codeforces】【比賽題解】#868 CF Round #438 (Div.1+Div.2)
這一 一行 mes 無限 解鎖 col 道路 ces 然而 這次是Div.1+Div.2,所以有7題。 因為時間較早,而且正好趕上訓練,所以機房開黑做。 然而我們都只做了3題。:(。 鏈接。 【A】聲控解鎖 題意: Arkady的寵物狗Mu-mu有一只手機。它需要朝這個手機
【codeforces】【比賽題解】#869 CF Round #439 (Div.2)
sister 十進制 長度 http include 越界 print const bool 良心賽,雖然我遲了半小時233333。 比賽鏈接:#869。 呃,CF的比賽都是有背景的……上次是《哈利波特》,這次是《物語》…… 【A】巧妙的替換 題意: Karen發現了石頭剪