CF #375 (Div. 2) D. bfs
1、CF #375 (Div. 2) D. Lakes in Berland
2、总结:麻烦的bfs,但其实很水。。
3、题意:n*m的陆地与水泽,水泽在边界表示连通海洋。最后要剩k个湖,总要填掉多少个湖,然后输出。
- #include<bits/stdc++.h>
- #define F(i,a,b) for (int i=a;i<b;i++)
- #define FF(i,a,b) for (int i=a;i<=b;i++)
- #define mes(a,b) memset(a,b,sizeof(a))
- #define INF 0x3f3f3f3f
- #define LL long long
- using namespace std;
- const int N=,MAX=;
- struct Node
- {
- int i,j,num;
- bool operator < (const Node &a)const{
- return num>a.num;
- }
- };
- int n,m,k,num,flag;
- int diri[]={,,,-};
- int dirj[]={,-,,};
- int vis[][];
- char mapn[][];
- bool charge(Node e)
- {
- if(mapn[e.i][e.j]=='.'&&e.i>=&&e.i<n&&e.j>=&&e.j<m&&!vis[e.i][e.j])
- return true;
- return false;
- }
- bool charge2(Node e)
- {
- if(e.i==||e.i==n-||e.j==||e.j==m-)
- return true;
- return false;
- }
- void bfs(int i,int j)
- {
- queue<Node>Q;
- Node st,en;
- st.i=i,st.j=j;
- vis[i][j]=;
- Q.push(st);
- if(charge2(st)){flag=;}
- while(!Q.empty())
- {
- st=Q.front();Q.pop();
- F(l,,){
- en.i=st.i+diri[l];
- en.j=st.j+dirj[l];
- if(charge(en)){
- if(charge2(en))flag=;
- vis[en.i][en.j]=;
- Q.push(en);
- num++;
- }
- }
- }
- }
- void bfs2(int i,int j)
- {
- queue<Node>Q;
- Node st,en;
- st.i=i,st.j=j;
- vis[i][j]=;
- Q.push(st);
- while(!Q.empty())
- {
- st=Q.front();Q.pop();
- F(l,,){
- en.i=st.i+diri[l];
- en.j=st.j+dirj[l];
- if(mapn[en.i][en.j]=='.'){
- mapn[en.i][en.j]='*';
- Q.push(en);
- }
- }
- }
- }
- int main()
- {
- while(~scanf("%d%d%d",&n,&m,&k))
- {
- int num1=;
- priority_queue<Node>Q;
- mes(vis,);
- F(i,,n)scanf("%s",mapn[i]);
- F(i,,n) F(j,,m){
- if(mapn[i][j]=='.'&&i>=&&i<n&&j>=&&j<m&&!vis[i][j]){
- num=,flag=;
- bfs(i,j);
- if(flag){
- num1++;
- Node ans;ans.i=i,ans.j=j,ans.num=num;
- Q.push(ans);
- }
- }
- }
- mes(vis,);
- int sum=;
- num1-=k;
- while(num1--){
- Node ans=Q.top();Q.pop();
- sum+=ans.num;
- mapn[ans.i][ans.j]='*';
- bfs2(ans.i,ans.j);
- }
- cout<<sum<<endl;
- F(i,,n)printf("%s\n",mapn[i]);
- }
- return ;
- }
CF #375 (Div. 2) D. bfs的更多相关文章
- CF #376 (Div. 2) C. dfs
1.CF #376 (Div. 2) C. Socks dfs 2.题意:给袜子上色,使n天左右脚袜子都同样颜色. 3.总结:一开始用链表存图,一直TLE test 6 (1)如果需 ...
- CF #374 (Div. 2) D. 贪心,优先队列或set
1.CF #374 (Div. 2) D. Maxim and Array 2.总结:按绝对值最小贪心下去即可 3.题意:对n个数进行+x或-x的k次操作,要使操作之后的n个数乘积最小. (1)优 ...
- CF #374 (Div. 2) C. Journey dp
1.CF #374 (Div. 2) C. Journey 2.总结:好题,这一道题,WA,MLE,TLE,RE,各种姿势都来了一遍.. 3.题意:有向无环图,找出第1个点到第n个点的一条路径 ...
- CF #371 (Div. 2) C、map标记
1.CF #371 (Div. 2) C. Sonya and Queries map应用,也可用trie 2.总结:一开始直接用数组遍历,果断T了一发 题意:t个数,奇变1,偶变0,然后与问的 ...
- 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) ,问在每个区间里所有 ...
- 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 ...
- cf 295 div 2 B (bfs)
题意:给出 n.m 两数,可以对 n 进行两种操作 减一或者乘二,操作过程中 n 必须保证非负,问使 n 变为 m 至少需要几步操作. 这是我练水题的时候做到的,题目不难,只是我 bfs 一直没怎么用 ...
- CF 222 (DIV 1)
A: 我是bfs出一颗树,然后删掉树后面的k个结点. 其实也可以直接bfs出一块连通的s - k个点,其余的.打X就可以了. 很水的题目. /* *************************** ...
- CF 520 B. Two Buttons(bfs)
/*题意:一个数,就是输入的第一个数,让它变成第二个数最少用几步.可以点红色按钮,蓝色按钮来改变数字,红色:*2,蓝色:-1,如果变成负数,就变成原来的数.CF 520 B. Two Buttons思 ...
随机推荐
- 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 ...
- 以空白符结尾的 alias
网上经常有人问这个问题:为什么我写的 alias 在 sudo 下就不管用了? $ alias 'll=ls -l' $ sudo ll a-private-dir sudo: ll: command ...
- ROS 5.x自动定时备份并发送到邮箱(实用)
博主使用ROS已经有很长一段时间了,但经常会忘记备份配置与数据库,加上ROS本身自带的User-Man数据库并不是非常稳定,1年中总会出现1-2次数据丢失的情况.所以费了一定功夫才找到真正可用自动备份 ...
- CSS高效开发实战:CSS 3、LESS、SASS、Bootstrap、Foundation --读书笔记(4)构造尺寸更灵活的背景
相比传统的图片背景来说,使用CSS构造背景色不仅可以降低网络传输的开销,更由于其尺寸的可控性受到开发者的青睐. 如设计师设计了一张背景图片作为标题背景,如图5.18所示.对于用电脑浏览网页的用户来说, ...
- func_get_arg、func_get_args、func_num_args实现PHP伪重载
今天在看书的时候,发现书上有这么一条:函数重载的替代方法——伪重载 确实,在PHP中没有函数重载这个概念,让很多时候我们无法进行一些处理,甚至有时候不得不在函数后面定义好N个参数在看到了func_ge ...
- getcwd()和dirname(__FILE__)的区别
我个人理解:getcwd()会随着包含文件的改变而改变,而dirname(__FILE__)不会.即 getcwd() 表示获取当前执行文件的物理路径. 如 getcwd()显示: /www/proj ...
- 前端XSS攻击和防御
xss跨站脚本攻击(Cross Site Scripting),是一种经常出现在web应用中的计算机安全漏洞,指攻击者在网页中嵌入客户端脚本(例如JavaScript), 当用户浏览此网页时,脚本就会 ...
- BZOJ 1131: [POI2008]Sta
Description 一棵树,问以那个节点为根时根的总和最大. Sol DFS+树形DP. 第一遍统计一下 size 和 d. 第二遍转移根,统计答案就行了. Code /************* ...
- Proj.4 API 中文参考
ProjAPI https://github.com/OSGeo/proj.4/wiki/ProjAPI Tom Kralidis在2015年5月27日编辑此页·修订4 简介 执行pj_init()选 ...
- ubuntu16.04 NVIDIA显卡驱动安装
安装环境:Ubuntu16.04 1.打开终端,先删除旧的驱动: sudo apt-get purge nvidia* 2禁用自带的 nouveau nvidia驱动 (important!) 创建一 ...