[BZOJ3631][JLOI2014]松鼠的新家
嗯。。。企图做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]松鼠的新家相关推荐
- bzoj3631[JLOI2014]松鼠的新家
bzoj3631[JLOI2014]松鼠的新家 题意: 给个n点树,再给个节点的游览顺序,每经过一个节点(包括上一个游览的点到下一个游览的点路径上的点)就可以从这个节点拿走一个糖,问所有节点一开始要放 ...
- BZOJ3631 [JLOI2014]松鼠的新家
Description 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在"树&q ...
- bzoj3631: [JLOI2014]松鼠的新家
容易发现是树剖裸题. 然后毒瘤选手AKC表示好像可以用树上差分+LCA做. 就这样.水题. 诶那你咋没秒切. 妈也看错样例,然后画错图,接着就是理解错题目,最后R成傻逼之时发现我ST表开数组的顺序错了 ...
- [BZOJ3631][JLOI2014]松鼠的新家(链剖)
题目描述 传送门 题解 小傻逼手残 随便写链剖. 代码 #include<iostream> #include<cstring> #include<cstdio> ...
- [Luogu 3258] JLOI2014 松鼠的新家
[Luogu 3258] JLOI2014 松鼠的新家 LCA + 树上差分. 我呢,因为是树剖求的 LCA,预处理了 DFN(DFS 序),于是简化成了序列差分. qwq不讲了不讲了,贴代码. #i ...
- P3258 [JLOI2014]松鼠的新家
文章目录 题意: 题解: 树上差分 代码: 树链剖分 代码: P3258 [JLOI2014]松鼠的新家 题意: n个点,n-1条边,给出每个点的拜访顺序,问每个点经过几次(最后一次移动不算拜访) 题 ...
- 洛谷 P3258 [JLOI2014]松鼠的新家 解题报告
P3258 [JLOI2014]松鼠的新家 题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他 ...
- 3631: [JLOI2014]松鼠的新家
3631: [JLOI2014]松鼠的新家 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 707 Solved: 342 [Submit][Sta ...
- bzoj 3631: [JLOI2014]松鼠的新家(LCA+树上差分)
3631: [JLOI2014]松鼠的新家 Time Limit: 10 Sec Memory Limit: 128 MB Submit: 2059 Solved: 1030 [Submit][S ...
最新文章
- OpenCV Hough Line变换
- 1030利用三层交换机实现VLAN间通信
- ldap协议 java_java如何调用ldap协议【LdapContext】
- 如何快速成长为技术大牛?阿里资深技术专家的经验告诉你
- Delphi实现点击按钮触发选择项, 进而实现不同的分支功能
- 递归法:汉诺塔(快速掌握)
- tricks about and-or in python
- Web服务器点击劫持(ClickJacking)的安全防范
- MNIST数据集下载 —— 数据集提供百度网盘下载地址
- excel图片根据表格内容动态变化
- 融云亮相GTC全球流量大会 荣膺鲸鸣奖2019年度优秀出海服务商
- LYOI 78 小澳的葫芦
- 数据约束 for:麻包缝裤衩
- 给大家推荐一个软件:视频广告过滤大师
- 弱加密算法有哪几种_常见的几种加密方法
- matlab多元回归模型分析,matlab多元回归工具箱 Excel数据分析工具进行多元回归分析.doc...
- outlook 邮件插入字自动消失
- deeplearningwithpython豆瓣_Python 学习资源教程(待续)
- java入门编程(一)
- oracle数据库如何存储图片,图片如何存放在oracle数据库?