题目:

一棵树,兹磁

  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. LoadRunner监控图表与配置(二)监控运行状况和交易状况

    1.在左侧Available Graphs视图中展开Runtime Graphs节点,选择其中一种类型添加至控制器运行标签的界面. 2.在图中显示的空白区域点击右键,在弹出的快捷菜单中选择config ...

  2. 开机时遇到grub rescue无法进入系统的解决方法

    装双系统(win10和elementary os),elementary os是ubuntu的一个分支.在win10中合并了一块空白磁盘分区,再开机的时候出问题了. 遇到filesystem unkn ...

  3. hdu-5781 ATM Mechine(dp+概率期望)

    题目链接: ATM Mechine Time Limit: 6000/3000 MS (Java/Others)     Memory Limit: 65536/65536 K (Java/Other ...

  4. L2-028 秀恩爱分得快(25 分)

    古人云:秀恩爱,分得快. 互联网上每天都有大量人发布大量照片,我们通过分析这些照片,可以分析人与人之间的亲密度.如果一张照片上出现了 K 个人,这些人两两间的亲密度就被定义为 1/K.任意两个人如果同 ...

  5. MySQL多个条件以什么表当做主条件表_20161111周五

    前两天有事情 停了2天 数据需求:1.活动日期11.8-11.10订单2.单笔订单购买A类产品 B类产品满足68元.且连续3天下单的用户ID 首先第一个条件很简单,主要是第二个条件 第二个条件是 且 ...

  6. poj1065 Wooden Sticks[LIS or 贪心]

    地址戳这.N根木棍待处理,每根有个长x宽y,处理第一根花费1代价,之后当处理到的后一根比前一根长或者宽要大时都要重新花费1代价,否则不花费.求最小花费代价.多组数据,N<=5000 本来是奔着贪 ...

  7. 1067 Bash 游戏v2

    传送门 1067 Bash游戏 V2 基准时间限制:1 秒 空间限制:131072 KB 分值: 10   有一堆石子共有N个.A B两个人轮流拿,A先拿.每次只能拿1,3,4颗,拿到最后1颗石子的人 ...

  8. 树——平衡二叉树插入和查找的JAVA实现(2):增加删除方法

    package com.tomsnail.data.tree; /** * AVL二叉平衡树 * @author tomsnail * @date 2015年3月30日 下午4:35:50 */ pu ...

  9. [poj3071]football概率dp

    题意:n支队伍两两进行比赛,求最有可能获得冠军的队伍. 解题关键:概率dp,转移方程:$dp[i][j] +  = dp[i][j]*dp[i][k]*p[j][k]$表示第$i$回合$j$获胜的概率 ...

  10. LeafLet之气泡框隐藏"x"图标

    例子:var marker.bindPopup( "我是一个图标的文本", { minWidth: 300 }).openPopup();L.Popup Constructor(函 ...