bzoj3208: 花神的秒题计划Ⅰ
3208: 花神的秒题计划Ⅰ
Time Limit: 16 Sec Memory Limit: 128 MB
Submit: 323 Solved: 211
[Submit][Status]
Description
能从高处往低处滑【严格大于】。但是由于地势经常变动【比如雪崩、滑坡】,高度经常变化;同时,政府政策规定对于每个区域都要间歇地进行保护,防止环境破
坏。现在,滑雪项目的要求是给出每个n*n个点的初始高度,并给出m个命令,C a b c表示坐标为a,b的点的高度改为c;S a b c
d表示左上角为a,b右下角为c,d的矩形地区开始进行保护,即不能继续滑雪;B a b c d表示左上角为a b,右下角为c
d的矩形地区取消保护,即可以开始滑雪;Q表示询问现在该风景区可以滑雪的最长路径为多少。对于每个Q要作一次回答。
Input
Output
Sample Input
1 2 3 4 5
10 9 8 7 6
11 12 13 14 15
20 19 18 17 16
21 22 23 24 25
5
C 1 1 3
Q
S 1 3 5 5
S 3 1 5 5
Q
Sample Output
3
样例解释:
第一个Q路线为:25->24->23->22….->3->2
第二个Q的路线为:10->9->2
HINT
100%的数据:1<=n<=700;1<=m<=1000000;其中Q、S、B操作总和<=100;
题中所有数据不超过2*10^9
Source
一看询问这么少肯定暴力搞。。。原来做顺治滑雪的时候写的是记忆化,现在发现暴力建图跑拓扑序求最长链貌似更直观。
代码:
#include<cstdio> #include<cstdlib> #include<cmath> #include<cstring> #include<algorithm> #include<iostream> #include<vector> #include<map> #include<set> #include<queue> #include<string> #define inf 1000000000 #define maxn 1000000+5 #define maxm 705 #define eps 1e-10 #define ll long long #define pa pair<int,int> #define for0(i,n) for(int i=0;i<=(n);i++) #define for1(i,n) for(int i=1;i<=(n);i++) #define for2(i,x,y) for(int i=(x);i<=(y);i++) #define for3(i,x,y) for(int i=(x);i>=(y);i--) #define mod 1000000007
#define num(i,j) ((i-1)*n+j) using namespace std; inline int read() { int x=,f=;char ch=getchar(); while(ch<''||ch>''){if(ch=='-')f=-;ch=getchar();} while(ch>=''&&ch<=''){x=*x+ch-'';ch=getchar();} return x*f; }
struct edge{int go,next;}e[*maxn];
int n,tot,a[maxm][maxm],head[maxn],inp[maxn],d[maxn];
queue<int>q;
bool flag[maxn];
const int dx[]={,,,-};
const int dy[]={,-,,};
inline void insert(int x,int y)
{
e[++tot].go=y;e[tot].next=head[x];head[x]=tot;
}
void work()
{
memset(d,,sizeof(d));
memset(inp,,sizeof(inp));
memset(head,,sizeof(head));tot=;
for1(i,n)
for1(j,n)
if(!flag[num(i,j)])
for0(k,)
{
int ii=i+dx[k],jj=j+dy[k];
if(ii<||ii>n||jj<||jj>n||flag[num(ii,jj)]||a[ii][jj]>=a[i][j])continue;
insert(num(i,j),num(ii,jj));inp[num(ii,jj)]++;
}
for1(i,n)for1(j,n)if(!flag[num(i,j)]&&!inp[num(i,j)])q.push(num(i,j)),d[num(i,j)]=;
while(!q.empty())
{
int x=q.front();q.pop();
for(int i=head[x];i;i=e[i].next)
{
int y=e[i].go;
inp[y]--;
d[y]=max(d[y],d[x]+);
if(!inp[y])q.push(y);
}
}
int ans=;
for1(i,n*n)ans=max(ans,d[i]);
printf("%d\n",ans);
} int main() { freopen("input.txt","r",stdin); freopen("output.txt","w",stdout); n=read();
for1(i,n)for1(j,n)a[i][j]=read();
int m=read();char ch[];
while(m--)
{
scanf("%s",ch);
if(ch[]=='Q')work();
else if(ch[]=='C'){int x=read(),y=read();a[x][y]=read();}
else
{
int x1=read(),y1=read(),x2=read(),y2=read();
for2(i,x1,x2)
for2(j,y1,y2)
flag[num(i,j)]=ch[]=='S'?:;
}
} return ; }
bzoj3208: 花神的秒题计划Ⅰ的更多相关文章
- BZOJ3208:花神的秒题计划Ⅰ(记忆化搜索DP)
Description 背景[backboard]: Memphis等一群蒟蒻出题中,花神凑过来秒题…… 描述[discribe]: 花花山峰峦起伏,峰顶常年被雪,Memphis打算帮花花山风景区 ...
- 【记忆化搜索】bzoj3208 花神的秒题计划Ⅰ
暴力 #include<cstdio> #include<cstring> #include<algorithm> using namespace std; #de ...
- bzoj 3208 花神的秒题计划I
bzoj 3208 花神的秒题计划I Description 背景[backboard]: Memphis等一群蒟蒻出题中,花神凑过来秒题-- 描述[discribe]: 花花山峰峦起伏,峰顶常年被雪 ...
- BZOJ-3208|记忆化搜索-花神的秒题计划Ⅰ
背景[backboard]: Memphis等一群蒟蒻出题中,花神凑过来秒题-- 描述[discribe]: 花花山峰峦起伏,峰顶常年被雪,Memphis打算帮花花山风景区的人员开发一个滑雪项目. 我 ...
- bzoj3208:花神的秒题计划I
思路:因为Q.S.B操作总和不超过100,因此怎么暴力怎么写....当然记忆化搜索还是要的 #include<cstdio> #include<iostream> #inclu ...
- 【bzoj3208】花神的秒题计划Ⅰ
记忆化搜索 #include<algorithm> #include<iostream> #include<cstring> #include<cstdlib ...
- BZOJ 3208: 花神的秒题计划Ⅰ
这就是一道滑雪嘛= = 所有操作都爆力,求路径就dp,完了 CODE: #include<cstdio>#include<iostream>#include<algori ...
- bzoj 前100题计划
bzoj前100题计划 xz布置的巨大的坑.. 有空填题解... 1002 轮状病毒 用python手动matrixtree打表. #include<bits/stdc++.h> #def ...
- Codeforces刷题计划
Codeforces刷题计划 已完成:-- / -- [Codeforces370E]370E - Summer Reading:构造:(给定某些数,在空白处填数,要求不下降,并且相邻差值<=1 ...
随机推荐
- Python学习入门教程,字符串函数扩充详解
因有用户反映,在基础文章对字符串函数的讲解太过少,故写一篇文章详细讲解一下常用字符串函数.本文章是对:程序员带你十天快速入门Python,玩转电脑软件开发(三)中字符串函数的详解与扩充. 如果您想学习 ...
- mht文件无法打开的解决办法
对于喜欢上网的人士来说,经常会将自己看到的好的文章保存下来,以便日后再次翻阅,保存方法有两种:一种是通过浏览器的收藏夹进行收藏,这种方式适合于能够一直上网的电脑:另一种是通过浏览器“文件->另存 ...
- 解读zookeeper的配置项
zookeeper的默认配置文件为zookeeper/conf/zoo_sample.cfg,需要将其修改为zoo.cfg.其中各配置项的含义,解释如下: 1.tickTime:CS通信心跳数 Zoo ...
- Oracle学习第三讲
关联查询 笛卡尔积 指做关联操作的每个表的每一行都和其他表的每一行组合,假设两个表的记录条数分别为x和y,笛卡尔积将返回x*y条记录 例如:select count(*) from emp; sele ...
- State 模式
State模式中我们将状态逻辑和动作实现进行分离.允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类:在一个状态即将结束的时候启用下一个状态. /////////state.h// ...
- 问题:Bringing up interface eth0: Device eth0 does not seem to be present,delaying initialization. [FAILED]—— 找不到网卡。
克隆虚拟机的时候或其他情况出现以下问题(命令service network restart): Bringing up interface eth0: Device eth0 does not ...
- Dice (III) 概率dp
#include <cstdio> #include <iostream> #include <cstring> #include <algorithm> ...
- 日期-用Datapicker实现前一天后一天
运用了JQuery UI Datepicker 插件和一些常用日期的方法.其中Datepicker的API具体可参考[http://api.jqueryui.com/datepicker/#optio ...
- HTML5-javascript屏幕旋转事件:onorientationchange
屏幕旋转事件:onorientationchange 添加屏幕旋转事件侦听,可随时发现屏幕旋转状态(左旋.右旋还是没旋) 判断屏幕是否旋转 function orientationChange() { ...
- java 整体字体样式设置
两种方式: 1.UIManager.put("Button.font", new Font("MS UI Gothic", Font.PLAIN, 24)) ...