博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[BZOJ 1095] [ZJOI 2007]Hide 捉迷藏
阅读量:4594 次
发布时间:2019-06-09

本文共 2199 字,大约阅读时间需要 7 分钟。

  在BZ上连续MLE n次后,终于A了.

  自己YY的动态点分写法,思路还是很清楚的,但是比较卡内存.

  用到了MAP导致复杂度比其他的代码多了一个log,看来需要去借鉴一下别人怎么写的.

 updata in 2017-05-25:

  发现了一些没必要储存的东西.

  1. 存储当前重心某子树堆的位置的MAP可以利用在重心树上的儿子记录此信息.

  2.求树上距离可以用RMQ,没必要直接拿MAP记下来.

  改完这两个令我颇不舒服的地方,复杂度就正常多了.

1 /*  2 动态树分治  3 BZOJ1095  4 全局路径查询  5 单点修改,全局查询  6 */  7 #include
8 #include
9 #include
10 #include
11 #include
12 #include
13 #include
14 #include
15 #include
16 #include
17 #include
18 #include
19 #include
20 #include
21 using namespace std; 22 #define ll long long 23 #define up(i,j,n) for(int i=j;i<=n;++i) 24 #define db double 25 #define piii pair< pair
,int> 26 #define pb push_back 27 #define FILE "dealing" 28 #define eps 1e-8 29 template
inline bool cmin(T&a,T b){ return a>b?a=b,true:false;} 30 template
inline bool cmax(T&a,T b){ return a
inline T squ(T a){ return a*a;} 32 const int maxn=100000+10,base=23,limit=3e8,inf=2000000; 33 int read(){ 34 int x=0,f=1,ch=getchar(); 35 while(ch<'0'||ch>'9'){ if(ch=='-')f=-1;ch=getchar();} 36 while(ch>='0'&&ch<='9')x=(x<<1)+(x<<3)+ch-'0',ch=getchar(); 37 return x*f; 38 } 39 int n,Q; 40 vector
E[maxn]; 41 struct dui{ 42 priority_queue
q,q2; 43 void pop(){ 44 while(!q.empty()&&!q2.empty()&&q.top()==q2.top())q.pop(),q2.pop(); 45 if(!q.empty())q.pop(); 46 } 47 int top(){ 48 while(!q.empty()&&!q2.empty()&&q.top()==q2.top())q.pop(),q2.pop(); 49 if(!q.empty())return q.top(); 50 else return -1; 51 } 52 void erase(int x){ 53 q2.push(x); 54 while(!q.empty()&&!q2.empty()&&q.top()==q2.top())q.pop(),q2.pop(); 55 } 56 void push(int x){ 57 q.push(x); 58 while(!q.empty()&&!q2.empty()&&q.top()==q2.top())q.pop(),q2.pop(); 59 } 60 int getans(){ 61 int s1=top();pop(); 62 int s2=top();push(s1); 63 if(s1==-1)return -1; 64 if(s2==-1)return -2; 65 return s1+s2; 66 } 67 }All,DA[maxn],MA[maxn<<1];int cnt=0; 68 int siz[maxn],vis[maxn],Mx[maxn],dep[maxn]; 69 int getsize(int x,int fa){ 70 siz[x]=1; 71 for(int i=0;i
F[maxn]; 87 map
A[maxn],B[maxn]; 88 void DFS(int x,int fa,int Cnt,int FA){ 89 A[FA][x]=Cnt; 90 B[FA][x]=dep[x]; 91 MA[Cnt].push(dep[x]); 92 for(int i=0;i
View Code

 

转载于:https://www.cnblogs.com/chadinblog/p/6901946.html

你可能感兴趣的文章
linux date命令
查看>>
程序执行流程/布尔类型与布尔:运算猜数字游戏;库的使用:turtle
查看>>
C# 连接Oracle,进行查询,插入操作
查看>>
Linux内核0.11 bootsect文件说明
查看>>
240.Search in a 2D Matrix II
查看>>
react 组件的生命周期
查看>>
[00013]-[2015-08-27]-[01]-[Windows 程序设计 ---GDI+ 截图---> BMP OR JPG OR PNG ...]
查看>>
linux用户
查看>>
空间距离计算
查看>>
180128-----Java面试题
查看>>
java①
查看>>
CentOS7静态IP设置
查看>>
java ee开发杂记
查看>>
php小程序支付代码(微信公众平台,完整版)
查看>>
笔试题总结
查看>>
nginx 使用总结
查看>>
贝多芬《升c小调第十四钢琴奏鸣曲》 个人浅谈
查看>>
了解一些多线程相关的知识
查看>>
C#入门详解(11)
查看>>
JQuery的ajax的用法 在asp中使用 $.ajax()
查看>>