嗯。。。企图做ZJOI2011,结果一题都不会QAQ。生气的写树剖来了~

这题暴力的树剖是可以的,但我是在黄学长那找了这题,他好像有个非常妙的做法,现在差不多要去打ball了,之后再学习一下吧。

树剖:

#include<cstdio>
#include<cstring>
#include<cstdlib>
#include<cmath>
#include<algorithm>
#include<iostream>
#include<string>
#include<ctime>
#include<queue>
#include<map>
#include<set>
#include<vector>
typedef long long LL;
using namespace std;
const int N=300010;
struct edge{int to,nxt;}e[N<<1];
struct node{int l,r,lazy;}a[N<<2];
int n,b[N],head[N],cnt,pos[N],siz[N],bel[N],fa[N];
int read() {int d=0,f=1; char c=getchar(); while (c<'0'||c>'9') {if (c=='-') f=-1; c=getchar();} while (c>='0'&&c<='9') d=(d<<3)+(d<<1)+c-48,c=getchar(); return d*f;}
void judge(){freopen(".in","r",stdin); freopen(".out","w",stdout);}
void addedge(int x,int y)
{e[++cnt]=(edge){y,head[x]}; head[x]=cnt;e[++cnt]=(edge){x,head[y]}; head[y]=cnt;
}
void dfs(int u)
{siz[u]=1;for (int i=head[u];i;i=e[i].nxt){int v=e[i].to;if (v==fa[u]) continue;fa[v]=u; dfs(v); siz[u]+=siz[v];}
}
void dfs2(int u,int Bel)
{pos[u]=++cnt; bel[u]=Bel;int x=0;for (int i=head[u];i;i=e[i].nxt){int v=e[i].to;if (v==fa[u]) continue;if (siz[v]>siz[x]) x=v;}if (!x) return;dfs2(x,Bel);for (int i=head[u];i;i=e[i].nxt){int v=e[i].to;if (v==fa[u]||v==x) continue;dfs2(v,v);}
}
void pushdown(int k)
{if (!a[k].lazy) return;int k1=k<<1,k2=k1|1;a[k1].lazy+=a[k].lazy; a[k2].lazy+=a[k].lazy;a[k].lazy=0;
}
void build(int k,int l,int r)
{a[k]=(node){l,r,0};if (l==r) return;int mid=(l+r)>>1;build(k<<1,l,mid); build(k<<1|1,mid+1,r);
}
void update(int k,int l,int r,int v)
{if (l<=a[k].l&&a[k].r<=r) {a[k].lazy+=v; return;}pushdown(k);int mid=(a[k].l+a[k].r)>>1;if (r<=mid) update(k<<1,l,r,v);else if (l>mid) update(k<<1|1,l,r,v);else update(k<<1,l,mid,v),update(k<<1|1,mid+1,r,v);
}
int ask(int k,int x)
{if (a[k].l==a[k].r) return a[k].lazy;pushdown(k);int mid=(a[k].l+a[k].r)>>1;if (x<=mid) return ask(k<<1,x);else return ask(k<<1|1,x);
}
int main()
{//judge();n=read();for (int i=1;i<=n;i++) b[i]=read();for (int i=1;i<n;i++) addedge(read(),read());dfs(1); cnt=0; dfs2(1,1); build(1,1,n);int x=b[1];for (int i=2;i<=n;i++){int y=b[i];while (bel[x]!=bel[y]){if (pos[x]<pos[y]) swap(x,y);update(1,pos[bel[x]],pos[x],1);x=fa[bel[x]];}if (pos[x]>pos[y]) swap(x,y);update(1,pos[x],pos[y],1);x=b[i];update(1,pos[x],pos[x],-1);}for (int i=1;i<=n;i++) printf("%d\n",ask(1,pos[i]));return 0;
}

View Code

未完待续...

摘自黄学长:http://hzwer.com/4522.html

其实是可以直接上树链剖分的

但是我们发现这道题只要实现每次将u-v路径的点权+1

只要在u和v上打个+1标记,lca(u,v)和lca(u,v)->fa打-1标记,最后dp上传标记即可

本质是个差分。。。

代码就不写了~\(≧▽≦)/~啦啦啦

完结~

转载于:https://www.cnblogs.com/lujiaju6555/p/6789549.html

[BZOJ3631][JLOI2014]松鼠的新家相关推荐

  1. bzoj3631[JLOI2014]松鼠的新家

    bzoj3631[JLOI2014]松鼠的新家 题意: 给个n点树,再给个节点的游览顺序,每经过一个节点(包括上一个游览的点到下一个游览的点路径上的点)就可以从这个节点拿走一个糖,问所有节点一开始要放 ...

  2. BZOJ3631 [JLOI2014]松鼠的新家

    Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在"树&q ...

  3. bzoj3631: [JLOI2014]松鼠的新家

    容易发现是树剖裸题. 然后毒瘤选手AKC表示好像可以用树上差分+LCA做. 就这样.水题. 诶那你咋没秒切. 妈也看错样例,然后画错图,接着就是理解错题目,最后R成傻逼之时发现我ST表开数组的顺序错了 ...

  4. [BZOJ3631][JLOI2014]松鼠的新家(链剖)

    题目描述 传送门 题解 小傻逼手残 随便写链剖. 代码 #include<iostream> #include<cstring> #include<cstdio> ...

  5. [Luogu 3258] JLOI2014 松鼠的新家

    [Luogu 3258] JLOI2014 松鼠的新家 LCA + 树上差分. 我呢,因为是树剖求的 LCA,预处理了 DFN(DFS 序),于是简化成了序列差分. qwq不讲了不讲了,贴代码. #i ...

  6. P3258 [JLOI2014]松鼠的新家

    文章目录 题意: 题解: 树上差分 代码: 树链剖分 代码: P3258 [JLOI2014]松鼠的新家 题意: n个点,n-1条边,给出每个点的拜访顺序,问每个点经过几次(最后一次移动不算拜访) 题 ...

  7. 洛谷 P3258 [JLOI2014]松鼠的新家 解题报告

    P3258 [JLOI2014]松鼠的新家 题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他 ...

  8. 3631: [JLOI2014]松鼠的新家

    3631: [JLOI2014]松鼠的新家 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 707  Solved: 342 [Submit][Sta ...

  9. bzoj 3631: [JLOI2014]松鼠的新家(LCA+树上差分)

    3631: [JLOI2014]松鼠的新家 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 2059  Solved: 1030 [Submit][S ...

最新文章

  1. OpenCV Hough Line变换
  2. 1030利用三层交换机实现VLAN间通信
  3. ldap协议 java_java如何调用ldap协议【LdapContext】
  4. 如何快速成长为技术大牛?阿里资深技术专家的经验告诉你
  5. Delphi实现点击按钮触发选择项, 进而实现不同的分支功能
  6. 递归法:汉诺塔(快速掌握)
  7. tricks about and-or in python
  8. Web服务器点击劫持(ClickJacking)的安全防范
  9. MNIST数据集下载 —— 数据集提供百度网盘下载地址
  10. excel图片根据表格内容动态变化
  11. 融云亮相GTC全球流量大会 荣膺鲸鸣奖2019年度优秀出海服务商
  12. LYOI 78 小澳的葫芦
  13. 数据约束 for:麻包缝裤衩
  14. 给大家推荐一个软件:视频广告过滤大师
  15. 弱加密算法有哪几种_常见的几种加密方法
  16. matlab多元回归模型分析,matlab多元回归工具箱 Excel数据分析工具进行多元回归分析.doc...
  17. outlook 邮件插入字自动消失
  18. deeplearningwithpython豆瓣_Python 学习资源教程(待续)
  19. java入门编程(一)
  20. oracle数据库如何存储图片,图片如何存放在oracle数据库?

热门文章

  1. PowerShell图形化编程1-原理
  2. Zaxis数据编程方法
  3. redis的主从复制,读写分离,主从切换
  4. 《数据库技术原理与应用教程》一3-5信息世界与逻辑模型
  5. Windows环境下MySQL的zip包精简方法与安装。
  6. easyui table 数据表筛选条件
  7. DLT(DeepLearningTracker)学习与代码理解 (1)
  8. myeclipse6.0下载及注冊码
  9. 演示:动态路由协议RIPv1的配置
  10. 【C语言学习趣事】_GCC源代码分析_2_assert.h