bzoj 1102
思路:用dfs 会爆栈,巨坑,要用bfs。
#include<bits/stdc++.h>
#define LL long long
#define fi first
#define se second
#define mk make_pair
#define pii pair<int,int>
#define piii pair<int, pair<int,int> > using namespace std; const int N = + ;
const int M = + ;
const int inf = 0x3f3f3f3f;
const LL INF = 0x3f3f3f3f3f3f3f3f;
const int mod = 1e9 + ;
const double eps = 1e-; int n, ans1, ans2, s[N][N], mx[N][N], mn[N][N];
int dx[] = {, -, , , , , -, -};
int dy[] = {, , , -, , -, , -}; bool vis[N][N]; bool bfs1(int sx, int sy) {
queue<pii> que;
vis[sx][sy] = true; que.push(mk(sx, sy)); bool flag = true;
while(!que.empty()) {
pii u = que.front(), v;
que.pop();
if(mx[u.fi][u.se] > s[u.fi][u.se]) {
flag = false;
} for(int i = ; i < ; i++) {
v.fi = u.fi + dx[i];
v.se = u.se + dy[i];
if(v.fi < || v.fi > n || v.se < || v.se > n || vis[v.fi][v.se] || s[v.fi][v.se] != s[u.fi][u.se])
continue;
vis[v.fi][v.se] = true;
que.push(v);
}
}
return flag;
} bool bfs2(int sx, int sy) {
queue<pii> que;
vis[sx][sy] = true; que.push(mk(sx, sy)); bool flag = true;
while(!que.empty()) {
pii u = que.front(), v;
que.pop();
if(mn[u.fi][u.se] < s[u.fi][u.se]) {
flag = false;
} for(int i = ; i < ; i++) {
v.fi = u.fi + dx[i];
v.se = u.se + dy[i];
if(v.fi < || v.fi > n || v.se < || v.se > n || vis[v.fi][v.se] || s[v.fi][v.se] != s[u.fi][u.se])
continue;
vis[v.fi][v.se] = true;
que.push(v);
}
} return flag;
} int main() {
scanf("%d", &n);
for(int i = ; i <= n; i++) {
for(int j = ; j <= n; j++) {
scanf("%d", &s[i][j]);
mx[i][j] = mn[i][j] = s[i][j];
}
} for(int i = ; i <= n; i++) {
for(int j = ; j <= n; j++) {
for(int k = ; k < ; k++) {
int x = i + dx[k];
int y = j + dy[k];
if(x < || x > n || y < || y > n)
continue; mx[i][j] = max(mx[i][j], s[x][y]);
mn[i][j] = min(mn[i][j], s[x][y]);
}
}
} ans1 = , ans2 = ;
for(int i = ; i <= n; i++) {
for(int j = ; j <= n; j++) {
if(!vis[i][j]) {
ans1 += bfs1(i, j);
}
}
} memset(vis, false, sizeof(vis)); for(int i = ; i <= n; i++) {
for(int j = ; j <= n; j++) {
if(!vis[i][j]) {
ans2 += bfs2(i, j);
}
}
} printf("%d %d\n", ans1, ans2);
return ;
}
bzoj 1102的更多相关文章
- [原博客] POI系列(2)
正规.严谨.精妙. -POI bzoj 1098 : [POI2007]办公楼biu 如果把互相有手机号的建边得到一个无向图,那么这个图的补图的连通分量个数就是答案了.因为互相没手机号的必然在同一个连 ...
- BZOJ 2127: happiness [最小割]
2127: happiness Time Limit: 51 Sec Memory Limit: 259 MBSubmit: 1815 Solved: 878[Submit][Status][Di ...
- BZOJ 3275: Number
3275: Number Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 874 Solved: 371[Submit][Status][Discus ...
- BZOJ 2879: [Noi2012]美食节
2879: [Noi2012]美食节 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1834 Solved: 969[Submit][Status] ...
- bzoj 4610 Ceiling Functi
bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...
- BZOJ 题目整理
bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...
- 【sdoi2013】森林 BZOJ 3123
Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数.第三行包含N个非负整数 ...
- 【清华集训】楼房重建 BZOJ 2957
Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...
- 【splay】文艺平衡树 BZOJ 3223
Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3 ...
随机推荐
- TCP协议基础知识及wireshark抓包分析实战
TCP相关知识 应swoole长连接开发调研相关TCP知识并记录. 数据封包流程 如图,如果我需要发送一条数据给用户,实际的大小肯定是大于你发送的大小,在各个数据层都进行了数据的封包,以便你的数据能完 ...
- Redis实战(六)管道
https://www.cnblogs.com/huangxincheng/p/6212406.html
- Array和String测试与java.String.split
java.string.split() 存在于java.lang包中,返回值是一个数组. 作用是按指定字符或者正则去切割某个字符串,结果以字符串数组形式返回. 例 String [] toSort = ...
- idea中tomcat乱码问题解决
在idea中经常遇到jsp的乱码问题,原因是编码不是UTF-8的问题,这次来彻底解决idea的编码问题 首先设置idea编辑器的编码: File-Setting设置如下 然后配置tomcat的编码问题 ...
- 爬虫实战--基于requests和beautifulsoup的妹子网图片爬取(福利哦!)
#coding=utf-8 import requests from bs4 import BeautifulSoup import os all_url = 'http://www.mzitu.co ...
- 商城项目(ssm+dubbo+nginx+mysql统合项目)总结(4)
我不会在这里贴代码和详细步骤什么的,我觉得就算我把它贴出来,你们照着步骤做还是会出很多问题,我推荐你们去看一下黑马的这个视频,我个人感觉很不错,一步一步走下来可以学到很多东西.另外,视频和相关文档的话 ...
- shell 监控磁盘使用率【转】
方案一: disks=(`df |sed 1d | awk '{print $1,$5}'|tr -d %`) len=${#disks[@]} ;i<=$len;i=i+));do ];the ...
- linux下使用privoxy将socks转为http代理
此博客不在更新,我的博客新地址:www.liuquanhao.com ----------------------------------------------------------------- ...
- Linux删除除了今天以外的文件
[背景] 开发到日志记录功能时,每天都会产生当天的一个日志,久而久之就会产生累积,想要查看的时候,tab键无法自动补全,还要自己额外输入. 比较麻烦. [命令] 经过查找和实验,找到了以下的方法: 1 ...
- zookeeper客户端连接报错
[root@zoo1 zookeeper-3.4.10]# bin/zkCli.sh -server 172.16.1.10:2181 2017-10-27 00:37:59,326 [myid:] ...