题目:

一棵树,兹磁

  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软件包管理器 树剖线段树的更多相关文章

  1. bzoj 4196 [Noi2015]软件包管理器 (树链剖分+线段树)

    4196: [Noi2015]软件包管理器 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 2852  Solved: 1668[Submit][Sta ...

  2. BZOJ 4196: [Noi2015]软件包管理器 [树链剖分 DFS序]

    4196: [Noi2015]软件包管理器 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1352  Solved: 780[Submit][Stat ...

  3. BZOJ_4196_[Noi2015]软件包管理器_树链剖分

    BZOJ_4196_[Noi2015]软件包管理器_树链剖分 题意: Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助 ...

  4. 【BZOJ4196】[Noi2015]软件包管理器 树链剖分

    [Noi2015]软件包管理器 树链剖分 Description Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从 ...

  5. 洛谷 P2146 [NOI2015]软件包管理器 树链剖分

    目录 题面 题目链接 题目描述 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 输出样例#1: 输入样例#2: 输出样例#2: 说明 说明 思路 AC代码 总结 题面 题目链接 P ...

  6. Bzoj 4196: [Noi2015]软件包管理器 树链剖分

    4196: [Noi2015]软件包管理器 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 721  Solved: 419[Submit][Statu ...

  7. [BZOJ4196][NOI2015]软件包管理器(树链剖分)

    4196: [Noi2015]软件包管理器 Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 2166  Solved: 1253[Submit][Sta ...

  8. 洛谷 P2146 [NOI2015]软件包管理器 解题报告

    P2146 [NOI2015]软件包管理器 题目描述 Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过一行命令安装某一个软件包,然后软件包管理器会帮助你从软件源下载软 ...

  9. [Luogu 2146] NOI2015 软件包管理器

    [Luogu 2146] NOI2015 软件包管理器 树剖好题. 通过对题目的分析发现,这些软件构成一棵树,\(0\) 是树根. 每下载一个软件,需要下载根到这个软件的路径上的所有软件: 每卸载一个 ...

  10. [NOI2015]软件包管理器

    4621 [NOI2015]软件包管理器  题目等级 : 钻石 Diamond   题目描述 Description Linux用户和OSX用户一定对软件包管理器不会陌生.通过软件包管理器,你可以通过 ...

随机推荐

  1. struts2 自定义类型转化 第三弹

    1.Struts2的类型转化,对于8种原生数据类型以及Date,String等常见类型,Struts2可以使用内建的类型转化器实现自动转化:但对于自定义的对象类型来说,就需要我们自己指定类型转化的的方 ...

  2. linux 下文件恢复工具extundelete介绍

        下载 http://extundelete.sourceforge.net/ bunzip2 extundelete-0.2.0.tar.bz2 tar xvf extundelete-0.2 ...

  3. bzoj4555: 求和sum 快速傅立叶变换

    题目大意 给定\(S(n,m)\)表示第二类斯特林数,定义函数\(f(n)\) \[f(n) = \sum_{i=0}^n\sum_{j=0}^iS(i,j)*2^j*(j!)\] 给定正整数\(n, ...

  4. php之配置redis

    Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-value数据库. 配置说明:https://www.cnblogs.com/lucky-man/p/8359110.html ph ...

  5. No overload for 'OnStartup' matches delegate 'System.Windows.StartupEventHandler'

    No overload for &apos;OnStartup&apos; matches delegate &apos;System.Windows.StartupEvent ...

  6. VIJOS:P1082丛林探险

    描述 东非大裂谷中有一片神秘的丛林,是全世界探险家的乐园,著名黄皮肤探险家BB一直想去试试.正好我国科学家2005年4月将首次对东非大裂谷进行科考,BB决定随科考队去神秘丛林探险.在出发之前,他搜集了 ...

  7. openstack 虚拟机添加网卡

    Openstack dashborad是没有给虚拟机添加网卡这个功能的,但是后台是有这行的接口的. 首先我们创建一个虚拟机,这个虚拟机制11.11.11网段的如图:

  8. 反射:newInstance()的使用方式

    通过反射创建新的类示例,有两种方式: Class.newInstance() Constructor.newInstance() 以下对两种调用方式给以比较说明: Class.newInstance( ...

  9. openStack vm备份

    由于VM是可能存在于不同节点上,所以当一个计算节点挂掉后,可以把挂掉的节点运行的VM在新的节点上继续运行. 虽然快照功能可以做恢复使用,但是毕竟快照只能恢复固定时间的VM,所以虚拟机备份很重要!对做好 ...

  10. java——static声明方法注意事项

    在使用 static 类型声明的方法时需要注意的是:如果在类中声明了一 static类型的属性,则此属性既可以在非 static 类型的方法中使用,也可以在 static类型的方法中使用.但用 sta ...