1、CF #375 (Div. 2)  D. Lakes in Berland

2、总结:麻烦的bfs,但其实很水。。

3、题意:n*m的陆地与水泽,水泽在边界表示连通海洋。最后要剩k个湖,总要填掉多少个湖,然后输出。

  1. #include<bits/stdc++.h>
  2. #define F(i,a,b) for (int i=a;i<b;i++)
  3. #define FF(i,a,b) for (int i=a;i<=b;i++)
  4. #define mes(a,b) memset(a,b,sizeof(a))
  5. #define INF 0x3f3f3f3f
  6. #define LL long long
  7. using namespace std;
  8. const int N=,MAX=;
  9. struct Node
  10. {
  11. int i,j,num;
  12. bool operator < (const Node &a)const{
  13. return num>a.num;
  14. }
  15. };
  16.  
  17. int n,m,k,num,flag;
  18. int diri[]={,,,-};
  19. int dirj[]={,-,,};
  20. int vis[][];
  21. char mapn[][];
  22.  
  23. bool charge(Node e)
  24. {
  25. if(mapn[e.i][e.j]=='.'&&e.i>=&&e.i<n&&e.j>=&&e.j<m&&!vis[e.i][e.j])
  26. return true;
  27. return false;
  28. }
  29.  
  30. bool charge2(Node e)
  31. {
  32. if(e.i==||e.i==n-||e.j==||e.j==m-)
  33. return true;
  34. return false;
  35. }
  36.  
  37. void bfs(int i,int j)
  38. {
  39. queue<Node>Q;
  40. Node st,en;
  41. st.i=i,st.j=j;
  42. vis[i][j]=;
  43. Q.push(st);
  44. if(charge2(st)){flag=;}
  45. while(!Q.empty())
  46. {
  47. st=Q.front();Q.pop();
  48. F(l,,){
  49. en.i=st.i+diri[l];
  50. en.j=st.j+dirj[l];
  51. if(charge(en)){
  52. if(charge2(en))flag=;
  53. vis[en.i][en.j]=;
  54. Q.push(en);
  55. num++;
  56. }
  57. }
  58. }
  59.  
  60. }
  61.  
  62. void bfs2(int i,int j)
  63. {
  64. queue<Node>Q;
  65. Node st,en;
  66. st.i=i,st.j=j;
  67. vis[i][j]=;
  68. Q.push(st);
  69. while(!Q.empty())
  70. {
  71. st=Q.front();Q.pop();
  72. F(l,,){
  73. en.i=st.i+diri[l];
  74. en.j=st.j+dirj[l];
  75. if(mapn[en.i][en.j]=='.'){
  76. mapn[en.i][en.j]='*';
  77. Q.push(en);
  78. }
  79. }
  80.  
  81. }
  82. }
  83.  
  84. int main()
  85. {
  86. while(~scanf("%d%d%d",&n,&m,&k))
  87. {
  88. int num1=;
  89. priority_queue<Node>Q;
  90. mes(vis,);
  91. F(i,,n)scanf("%s",mapn[i]);
  92. F(i,,n) F(j,,m){
  93. if(mapn[i][j]=='.'&&i>=&&i<n&&j>=&&j<m&&!vis[i][j]){
  94. num=,flag=;
  95. bfs(i,j);
  96. if(flag){
  97. num1++;
  98. Node ans;ans.i=i,ans.j=j,ans.num=num;
  99. Q.push(ans);
  100. }
  101. }
  102. }
  103. mes(vis,);
  104. int sum=;
  105. num1-=k;
  106. while(num1--){
  107. Node ans=Q.top();Q.pop();
  108. sum+=ans.num;
  109. mapn[ans.i][ans.j]='*';
  110. bfs2(ans.i,ans.j);
  111. }
  112. cout<<sum<<endl;
  113. F(i,,n)printf("%s\n",mapn[i]);
  114. }
  115.  
  116. return ;
  117. }

CF #375 (Div. 2) D. bfs的更多相关文章

  1. CF #376 (Div. 2) C. dfs

    1.CF #376 (Div. 2)    C. Socks       dfs 2.题意:给袜子上色,使n天左右脚袜子都同样颜色. 3.总结:一开始用链表存图,一直TLE test 6 (1)如果需 ...

  2. CF #374 (Div. 2) D. 贪心,优先队列或set

    1.CF #374 (Div. 2)   D. Maxim and Array 2.总结:按绝对值最小贪心下去即可 3.题意:对n个数进行+x或-x的k次操作,要使操作之后的n个数乘积最小. (1)优 ...

  3. CF #374 (Div. 2) C. Journey dp

    1.CF #374 (Div. 2)    C.  Journey 2.总结:好题,这一道题,WA,MLE,TLE,RE,各种姿势都来了一遍.. 3.题意:有向无环图,找出第1个点到第n个点的一条路径 ...

  4. CF #371 (Div. 2) C、map标记

    1.CF #371 (Div. 2)   C. Sonya and Queries  map应用,也可用trie 2.总结:一开始直接用数组遍历,果断T了一发 题意:t个数,奇变1,偶变0,然后与问的 ...

  5. CF #365 (Div. 2) D - Mishka and Interesting sum 离线树状数组

    题目链接:CF #365 (Div. 2) D - Mishka and Interesting sum 题意:给出n个数和m个询问,(1 ≤ n, m ≤ 1 000 000) ,问在每个区间里所有 ...

  6. CF #365 (Div. 2) D - Mishka and Interesting sum 离线树状数组(转)

    转载自:http://www.cnblogs.com/icode-girl/p/5744409.html 题目链接:CF #365 (Div. 2) D - Mishka and Interestin ...

  7. cf 295 div 2 B (bfs)

    题意:给出 n.m 两数,可以对 n 进行两种操作 减一或者乘二,操作过程中 n 必须保证非负,问使 n 变为 m 至少需要几步操作. 这是我练水题的时候做到的,题目不难,只是我 bfs 一直没怎么用 ...

  8. CF 222 (DIV 1)

    A: 我是bfs出一颗树,然后删掉树后面的k个结点. 其实也可以直接bfs出一块连通的s - k个点,其余的.打X就可以了. 很水的题目. /* *************************** ...

  9. CF 520 B. Two Buttons(bfs)

    /*题意:一个数,就是输入的第一个数,让它变成第二个数最少用几步.可以点红色按钮,蓝色按钮来改变数字,红色:*2,蓝色:-1,如果变成负数,就变成原来的数.CF 520 B. Two Buttons思 ...

随机推荐

  1. Description Resource Path Location Type Java compiler level does not match the version of the instal

    解决办法 在项目上右键Properties->Project Facets,在打开的Project Facets页面中的Java下拉列表中,选择相应版本. 有可能是java1.6 改成java6 ...

  2. 以空白符结尾的 alias

    网上经常有人问这个问题:为什么我写的 alias 在 sudo 下就不管用了? $ alias 'll=ls -l' $ sudo ll a-private-dir sudo: ll: command ...

  3. ROS 5.x自动定时备份并发送到邮箱(实用)

    博主使用ROS已经有很长一段时间了,但经常会忘记备份配置与数据库,加上ROS本身自带的User-Man数据库并不是非常稳定,1年中总会出现1-2次数据丢失的情况.所以费了一定功夫才找到真正可用自动备份 ...

  4. CSS高效开发实战:CSS 3、LESS、SASS、Bootstrap、Foundation --读书笔记(4)构造尺寸更灵活的背景

    相比传统的图片背景来说,使用CSS构造背景色不仅可以降低网络传输的开销,更由于其尺寸的可控性受到开发者的青睐. 如设计师设计了一张背景图片作为标题背景,如图5.18所示.对于用电脑浏览网页的用户来说, ...

  5. func_get_arg、func_get_args、func_num_args实现PHP伪重载

    今天在看书的时候,发现书上有这么一条:函数重载的替代方法——伪重载 确实,在PHP中没有函数重载这个概念,让很多时候我们无法进行一些处理,甚至有时候不得不在函数后面定义好N个参数在看到了func_ge ...

  6. getcwd()和dirname(__FILE__)的区别

    我个人理解:getcwd()会随着包含文件的改变而改变,而dirname(__FILE__)不会.即 getcwd() 表示获取当前执行文件的物理路径. 如 getcwd()显示: /www/proj ...

  7. 前端XSS攻击和防御

    xss跨站脚本攻击(Cross Site Scripting),是一种经常出现在web应用中的计算机安全漏洞,指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会 ...

  8. BZOJ 1131: [POI2008]Sta

    Description 一棵树,问以那个节点为根时根的总和最大. Sol DFS+树形DP. 第一遍统计一下 size 和 d. 第二遍转移根,统计答案就行了. Code /************* ...

  9. Proj.4 API 中文参考

    ProjAPI https://github.com/OSGeo/proj.4/wiki/ProjAPI Tom Kralidis在2015年5月27日编辑此页·修订4 简介 执行pj_init()选 ...

  10. ubuntu16.04 NVIDIA显卡驱动安装

    安装环境:Ubuntu16.04 1.打开终端,先删除旧的驱动: sudo apt-get purge nvidia* 2禁用自带的 nouveau nvidia驱动 (important!) 创建一 ...