NOI2015软件包管理器 树剖线段树
题目:
一棵树,兹磁
1.查询根到一个点的染色点数并全染好
2.查询子树内染色点数并把颜色洗掉
树剖裸题,丝毫不虚(为什么我考试的时候碰不到这种好题呢)好像20min写完搞定
#include <bits/stdc++.h>
#define mid (l+r>>1)
using namespace std;
int TIME,n,m,t;char ch;
int size[],fir[],nex[],top[];
int pos[],en[],fa[];
int fz[],sum[];
int dfs(int now)
{
size[now]=;
for(int i=fir[now];i;i=nex[i])
size[now]+=dfs(i);
return size[now];
}
void pou(int now,int tp)
{
top[now]=tp;pos[now]=++TIME;
int best=fir[now];
for(int i=fir[now];i;i=nex[i])
if(size[i]>size[best]) best=i;
if(best)
pou(best,tp);
for(int i=fir[now];i;i=nex[i])
if(i!=best) pou(i,i);
en[now]=TIME;
}
void down(int now,int l,int r)
{
if(fz[now]>-)
{
fz[now<<]=fz[now<<|]=fz[now];
sum[now<<]=(mid-l+)*fz[now];
sum[now<<|]=(r-mid)*fz[now];
fz[now]=-;
}
}
int que(int now,int l,int r,int x,int y)
{
if(l==x && r==y)
return sum[now];
down(now,l,r);
int ret=;
if(x<=mid)
ret+=que(now<<,l,mid,x,min(mid,y));
if(y>mid)
ret+=que(now<<|,mid+,r,max(mid+,x),y);
return ret;
}
void change(int now,int l,int r,int x,int y,int z)
{
if(l==x && r==y)
{
sum[now]=z*(r-l+);
fz[now]=z;
return;
}
down(now,l,r);
if(x<=mid)
change(now<<,l,mid,x,min(mid,y),z);
if(y>mid)
change(now<<|,mid+,r,max(mid+,x),y,z);
sum[now]=sum[now<<]+sum[now<<|];
}
int main()
{
scanf("%d",&n);
for(int i=;i<=n;i++)
scanf("%d",&fa[i]),++fa[i],nex[i]=fir[fa[i]],fir[fa[i]]=i;
dfs();pou(,);
scanf("%d",&m);
for(int i=;i<=m;i++)
{
for(ch=getchar();!isalpha(ch);ch=getchar());
if(ch=='i')
{
for(int i=;i<=;i++)
getchar();
scanf("%d",&t);++t;
int ret=;
for(;t;t=fa[top[t]])
ret+=pos[t]-pos[top[t]]+-que(,,n,pos[top[t]],pos[t]),
change(,,n,pos[top[t]],pos[t],);
printf("%d\n",ret);
}
if(ch=='u')
{
for(int i=;i<=;i++)
getchar();
scanf("%d",&t);++t;
printf("%d\n",que(,,n,pos[t],en[t]));
change(,,n,pos[t],en[t],);
}
}
return ;
}
NOI2015软件包管理器 树剖线段树的更多相关文章
- bzoj 4196 [Noi2015]软件包管理器 (树链剖分+线段树)
4196: [Noi2015]软件包管理器 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 2852 Solved: 1668[Submit][Sta ...
- BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]
4196: [Noi2015]软件包管理器 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 1352 Solved: 780[Submit][Stat ...
- BZOJ_4196_[Noi2015]软件包管理器_树链剖分
BZOJ_4196_[Noi2015]软件包管理器_树链剖分 题意: Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助 ...
- 【BZOJ4196】[Noi2015]软件包管理器 树链剖分
[Noi2015]软件包管理器 树链剖分 Description Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从 ...
- 洛谷 P2146 [NOI2015]软件包管理器 树链剖分
目录 题面 题目链接 题目描述 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 输出样例#1: 输入样例#2: 输出样例#2: 说明 说明 思路 AC代码 总结 题面 题目链接 P ...
- Bzoj 4196: [Noi2015]软件包管理器 树链剖分
4196: [Noi2015]软件包管理器 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 721 Solved: 419[Submit][Statu ...
- [BZOJ4196][NOI2015]软件包管理器(树链剖分)
4196: [Noi2015]软件包管理器 Time Limit: 10 Sec Memory Limit: 512 MBSubmit: 2166 Solved: 1253[Submit][Sta ...
- 洛谷 P2146 [NOI2015]软件包管理器 解题报告
P2146 [NOI2015]软件包管理器 题目描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软 ...
- [Luogu 2146] NOI2015 软件包管理器
[Luogu 2146] NOI2015 软件包管理器 树剖好题. 通过对题目的分析发现,这些软件构成一棵树,\(0\) 是树根. 每下载一个软件,需要下载根到这个软件的路径上的所有软件: 每卸载一个 ...
- [NOI2015]软件包管理器
4621 [NOI2015]软件包管理器 题目等级 : 钻石 Diamond 题目描述 Description Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过 ...
随机推荐
- 三年java软件工程师应有的技技能
摘要:http://blog.csdn.net/jieinasiainfo/article/details/51177729 http://blog.csdn.net/kangqianglong/ar ...
- 分享知识-快乐自己:Mybatis缓存机制
论缓存机制: 1):mybatis 提供了缓存机制减轻数据库压力,提高数据库性能. 2):mybatis 的缓存分为两级:一级缓存.二级缓存 3):一级缓存是SqlSession级别的缓存,缓存的数据 ...
- 如何解决GBK的编码的文件中的中文转换成为UTF-8编码的文件而且不乱码
首先我们必须明确一点,为什么正常转换会乱码? 因为我们的数据写入是GBK写入的,然后展示的话是按照文件保存形势展示的,前面保存形势是GBK,一致,所以不乱码,而后面将保存形势变成了UTF-8,但是写入 ...
- 自己实现的vector
#include <iostream> #include <memory> using std::cout; using std::endl; using std::alloc ...
- poj1149PIGS——网络最大流
题目:http://poj.org/problem?id=1149 不把猪圈当做点,而把顾客当作点,把猪当作边权(流量): 因为猪圈中的猪可流动,所以共用一个猪圈的人互相连边: 注意应该连成链的形式, ...
- 洛谷P1220关路灯——区间DP
题目:https://www.luogu.org/problemnew/show/P1220 区间DP. 代码如下: #include<iostream> #include<cstd ...
- RT-Thread信号量使用(动态/静态信号量) 及 信号量的四种使用场合
信号量(Semaphore),有时被称为信号灯,是在多线程环境下使用的一种设施,是可以用来保证两个或多个关键代码段不被并发调用.在进入一个关键代码段之前,线程必须获取一个信号量:一旦该关键代码段完成了 ...
- ELK安装配置简单使用
ELK是三款软件的总称,包括了elasticsearch.logstash.kibana,其实在生产使用中,我们还需要使用到其他的更多辅助软件来更好更合理的收集展示数据. Elasticsearch: ...
- ajax方法data参数用法的总结
源文件分析: data的传递格式有两种:一是url字符串格式:一种是Json格式,格式分别如上 区别是:当传递的参数中包含 特殊字符如:&时,服务器解析这个参数时就会出错,而必须用encode ...
- Web.config文件中关于Cookie安全性的考量和设置
cookie的内容,如图所示: HTTP response header: Set-Cookie: <name>=<value>[; <Max-Age>=<a ...