F - Lakes in Berland(BFS)
The map of Berland is a rectangle of the size n × m, which consists of cells of size 1 × 1. Each cell is either land or water. The map is surrounded by the ocean.
Lakes are the maximal regions of water cells, connected by sides, which are not connected with the ocean. Formally, lake is a set of water cells, such that it's possible to get from any cell of the set to any other without leaving the set and moving only to cells adjacent by the side, none of them is located on the border of the rectangle, and it's impossible to add one more water cell to the set such that it will be connected with any other cell.
You task is to fill up with the earth the minimum number of water cells so that there will be exactly klakes in Berland. Note that the initial number of lakes on the map is not less than k.
Input
The first line of the input contains three integers n, m and k (1 ≤ n, m ≤ 50, 0 ≤ k ≤ 50) — the sizes of the map and the number of lakes which should be left on the map.
The next n lines contain m characters each — the description of the map. Each of the characters is either '.' (it means that the corresponding cell is water) or '*' (it means that the corresponding cell is land).
It is guaranteed that the map contain at least k lakes.
Output
In the first line print the minimum number of cells which should be transformed from water to land.
In the next n lines print m symbols — the map after the changes. The format must strictly follow the format of the map in the input data (there is no need to print the size of the map). If there are several answers, print any of them.
It is guaranteed that the answer exists on the given data.
Example
5 4 1
****
*..*
****
**.*
..**
1
****
*..*
****
****
..**
3 3 0
***
*.*
***
1
***
***
***
Note
In the first example there are only two lakes — the first consists of the cells (2, 2) and (2, 3), the second consists of the cell (4, 3). It is profitable to cover the second lake because it is smaller. Pay attention that the area of water in the lower left corner is not a lake because this area share a border with the ocean.
1 #include <iostream>
2 #include <cstdio>
3 #include <algorithm>
4 #include <cstring>
5 #include <map>
6 using namespace std;
7 typedef long long ll;
8 const int N=55;
9 inline int read(){
10 char c=getchar();int x=0,f=1;
11 while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
12 while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
13 return x*f;
14 }
15 int n,m,k;
16 char g[N][N];
17 int dx[4]={1,-1,0,0},dy[4]={0,0,1,-1};
18 int vis[N][N],num[N*N],cc=0;
19 struct lakes{
20 int size,id;
21 }lake[N*N];
22 int cnt=0;
23 bool cmp(lakes &a,lakes &b){
24 return a.size<b.size;
25 }
26 void dfs(int x,int y,int id){//printf("dfs %d %d %d\n",x,y,id);
27 vis[x][y]=id;num[id]++;
28 for(int i=0;i<4;i++){
29 int nx=x+dx[i],ny=y+dy[i];
30 if(nx<1||nx>n||ny<1||ny>m) continue;
31 if(g[nx][ny]=='*'||vis[nx][ny]) continue;
32 dfs(nx,ny,id);
33 }
34 }
35 int ans=0;
36 void fil(int x,int y,int id){//printf("fil %d %d %d\n",x,y,id);
37 g[x][y]='*';ans++;
38 for(int i=0;i<4;i++){
39 int nx=x+dx[i],ny=y+dy[i];
40 if(nx<1||nx>n||ny<1||ny>m) continue;
41 if(vis[nx][ny]==id&&g[nx][ny]=='.') fil(nx,ny,id);
42 }
43 }
44 int main(){
45 n=read();m=read();k=read();
46 for(int i=1;i<=n;i++){
47 scanf("%s",g[i]);
48 for(int j=m;j>=1;j--) g[i][j]=g[i][j-1];
49 }
50
51 for(int i=1;i<=n;i++){
52 if(!vis[i][1]&&g[i][1]=='.') dfs(i,1,++cc);
53 if(!vis[i][m]&&g[i][m]=='.') dfs(i,m,++cc);
54 }
55 for(int j=1;j<=m;j++){
56 if(!vis[1][j]&&g[1][j]=='.') dfs(1,j,++cc);
57 if(!vis[n][j]&&g[n][j]=='.') dfs(n,j,++cc);
58 }
59 int sea=cc;
60 for(int i=1;i<=n;i++)
61 for(int j=1;j<=m;j++){
62 if(!vis[i][j]&&g[i][j]=='.')
63 dfs(i,j,++cc);
64 }
65 for(int i=sea+1;i<=cc;i++) {lake[++cnt].size=num[i];lake[cnt].id=i;}//printf("%d %d\n",sea,cc);
66 sort(lake+1,lake+1+cnt,cmp);
67 //for(int i=1;i<=cnt;i++) printf("lake %d %d\n",lake[i].id,lake[i].size);
68 int t=cnt-k,p=1;//printf("t %d\n",t);
69 for(int z=1;z<=t;z++){
70 int fin=0;
71 for(int i=1;i<=n;i++){
72 for(int j=1;j<=m;j++)
73 if(lake[p].id==vis[i][j]){fil(i,j,lake[p++].id);fin=1;break;}
74 if(fin) break;
75 }
76 }
77 printf("%d\n",ans);
78 for(int i=1;i<=n;i++){
79 for(int j=1;j<=m;j++) printf("%c",g[i][j]);
80 if(i!=n) putchar('\n');
81 }
82
83 }
F - Lakes in Berland(BFS)的更多相关文章
- 【29.70%】【codeforces 723D】Lakes in Berland
time limit per test2 seconds memory limit per test256 megabytes inputstandard input outputstandard o ...
- codeforce375div2-D. Lakes in Berland 搜索
Lakes in Berland 题意与解释:这道题就是求图中被围起来的点群,问最少去掉几个点,可以使得孤立的点群数目为K; 因为自己写的代码又长又had bugs. 我自己写的bfs,想着是先染色, ...
- CF723D. Lakes in Berland[DFS floodfill]
D. Lakes in Berland time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- codeforces 723D: Lakes in Berland
Description The map of Berland is a rectangle of the size n × m, which consists of cells of size 1 × ...
- CF723D 【Lakes in Berland】
题目链接 题解 CF723D [Lakes in Berland] 首先将边界的水用bfs处理掉 再将中间的每一个湖泊处理出来,存入一个结构体内,结构体里记录湖泊大小和开始点 将湖泊排序从小往大填满, ...
- cf723d Lakes in Berland
The map of Berland is a rectangle of the size n × m, which consists of cells of size 1 × 1. Each cel ...
- Codeforces Round #375 (Div. 2)——D. Lakes in Berland(DFS连通块)
D. Lakes in Berland time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Codeforces Round #375 (Div. 2) D. Lakes in Berland dfs
D. Lakes in Berland time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- codeforces723 D. Lakes in Berland(并查集)
题目链接:codeforces723 D. Lakes in Berland 参考博客:http://www.cnblogs.com/Geek-xiyang/p/5930245.html #inclu ...
随机推荐
- Python 学习笔记(2)
python 引号 Python 可以使用引号( ' ).双引号( " ).三引号( ''' 或 """ ) 来表示字符串,引号的开始与结束必须是相同类型的. ...
- 一文吃透如何部署kubernetes高可用集群
使用 k8s 官方提供的部署工具 kubeadm 自动安装,需要在 master 和 node 节点上安装 docker 等组件,然后初始化,把管理端的控制服务和 node 上的服务都以 pod 的方 ...
- Lambda 表达式简介
0.预备知识 函数式接口:只包含一个抽象方法的接口. 内部类:静态.成员内部类 局部内部类 匿名内部类 1.代码 1 /** 2 * 函数式编程: 3 * lambda表达式前提: 4 * 必须是函数 ...
- 12张图打开JMeter体系结构全局视角
JMeter是Java技术栈工具,在软件测试领域应用非常广泛,无论是性能测试还是接口测试,技术都很成熟和稳定.它有一个突出特点:开源,适合做二次开发,以阿里为代表的Java技术栈公司都对它青睐有加.在 ...
- 微信小程序折线图表折线图加区域图
1.先来个效果图 这里我用的是插件@antv/f2-canvas(安装的方法如下) npm init 此处如果直接使用官方npm install 可能会出现没有node_modules错误 npm i ...
- OpenGL光照贴图
一:啥叫贴图 上一节中,我们将整个物体的材质定义为一个整体,但现实世界中的物体通常并不只包含有一种材质,而是由多种材质所组成. 拓展之前的系统,引入漫反射和镜面光贴图(Map).这允许我们对物体的漫反 ...
- spring 整合kafka监听消费
前言 最近项目里有个需求,要消费kafka里的数据.之前也手动写过代码去消费kafka数据.但是转念一想.既然spring提供了消费kafka的方法.就没必要再去重复造轮子.于是尝试使用spring的 ...
- 关闭ubuntu防火墙
1.关闭ubuntu的防火墙 ufw disable 开启防火墙 ufw enable 2.卸载了iptables apt-get remove iptables 3.关闭ubuntu中的防火墙的其余 ...
- ElasticSearch 进阶
目录 ElasticSearch 进阶 SearchAPI 检索信息 Query DSL 基本语法格式 查询-match 查询-match_phrase 查询-multi_match 查询-bool复 ...
- Codeforces Round #546 C. Nastya Is Transposing Matrices
题面: 传送门 题目描述: 给出两个n x m的矩阵A,B.矩阵A可以把正方子矩阵进行"转置操作",问:可不可以对矩阵A进行多次这样的操作,使矩阵A变为矩阵B? 题目分析: 这 ...