思路:用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的更多相关文章

  1. [原博客] POI系列(2)

    正规.严谨.精妙. -POI bzoj 1098 : [POI2007]办公楼biu 如果把互相有手机号的建边得到一个无向图,那么这个图的补图的连通分量个数就是答案了.因为互相没手机号的必然在同一个连 ...

  2. BZOJ 2127: happiness [最小割]

    2127: happiness Time Limit: 51 Sec  Memory Limit: 259 MBSubmit: 1815  Solved: 878[Submit][Status][Di ...

  3. BZOJ 3275: Number

    3275: Number Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 874  Solved: 371[Submit][Status][Discus ...

  4. BZOJ 2879: [Noi2012]美食节

    2879: [Noi2012]美食节 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1834  Solved: 969[Submit][Status] ...

  5. bzoj 4610 Ceiling Functi

    bzoj 4610 Ceiling Functi Description bzoj上的描述有问题 给出\(n\)个长度为\(k\)的数列,将每个数列构成一个二叉搜索树,问有多少颗形态不同的树. Inp ...

  6. BZOJ 题目整理

    bzoj 500题纪念 总结一发题目吧,挑几道题整理一下,(方便拖板子) 1039:每条线段与前一条线段之间的长度的比例和夹角不会因平移.旋转.放缩而改变,所以将每条轨迹改为比例和夹角的序列,复制一份 ...

  7. 【sdoi2013】森林 BZOJ 3123

    Input 第一行包含一个正整数testcase,表示当前测试数据的测试点编号.保证1≤testcase≤20. 第二行包含三个整数N,M,T,分别表示节点数.初始边数.操作数.第三行包含N个非负整数 ...

  8. 【清华集训】楼房重建 BZOJ 2957

    Description 小A的楼房外有一大片施工工地,工地上有N栋待建的楼房.每天,这片工地上的房子拆了又建.建了又拆.他经常无聊地看着窗外发呆,数自己能够看到多少栋房子. 为了简化问题,我们考虑这些 ...

  9. 【splay】文艺平衡树 BZOJ 3223

    Description 您需要写一种数据结构(可参考题目标题),来维护一个有序数列,其中需要提供以下操作:翻转一个区间,例如原有序序列是5 4 3 2 1,翻转区间是[2,4]的话,结果是5 2 3  ...

随机推荐

  1. echo 不换行

    原文 http://blog.sina.com.cn/s/blog_4da051a6010184uk.html echo -n 不换行输出   $echo -n "123" $ec ...

  2. C语言 结构体作为参数和返回值使用

    方案一:结构体变量作为参数,进行传值. 编译器需要拷贝,不影响origin value,使用成员操作符(.)直接访问 /**************************************** ...

  3. centos6.5 mqtt安装

    CentOs 6.5 MQTT 安装部署 所需安装包: libwebsockets-v1.6-stable.tar.gz,mosquitto-1.4.8.tar.gz 1.安装依赖 # yum -y ...

  4. System中关于Property的方法

    System类在java.lang包中,所有方法都是静态的,里边有很多对系统的属性和控制方法 System类有三个成员变量:out-标准输出流(默认是控制台),in-标准输入流(默认是键盘),err- ...

  5. 【CodeForces】576 D. Flights for Regular Customers

    [题目]D. Flights for Regular Customers [题意]给定n个点m条边的有向图,每条边有di表示在经过该边前必须先经过di条边,边可重复经过,求1到n的最小经过边数.n,m ...

  6. Linux 官方镜像源汇总

    原文链接   参考链接 1.企业贡献:阿里云开源镜像站: http://mirrors.aliyun.com 搜狐开源镜像站:http://mirrors.sohu.com网易开源镜像站:http:/ ...

  7. Unity 添加鼠标右键事件

    把此类放到 Editor下使用就OK using UnityEngine; using System.Collections; using System.Collections.Generic; us ...

  8. hdu 5373 The shortest problem(杭电多校赛第七场)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5373 The shortest problem Time Limit: 3000/1500 MS (J ...

  9. 新一代的USB 3.0传输规格

    通用序列总线(USB) 从1996问世以来,一统个人电脑外部连接界面,且延伸至各式消费性产品,早已成为现代人生活的一部分.2000年发表的USB 2.0 High-speed规格,提供了480Mbps ...

  10. java中String的==和equals的区别

    首先看代码1: public static void main(String[] args) { List<String> list=new ArrayList<String> ...