未完成2130

#include <cstdio>
#define N 100005
bool now[N];
int nextt[N<<1],to[N<<1],head[N],cnt,n,q,tim,siz[N],fa[N],dep[N],belong[N],top[N];
struct Segment
{
    int l,r,mid,sum,flag;
    Segment *ch[2];
    Segment()
    {
        ch[0]=ch[1]=NULL;
        flag=0;
    }
}*root=new Segment;
void dfs1(int x)
{
    siz[x]=1;
    dep[x]=dep[fa[x]]+1;
    for(int i=head[x];i;i=nextt[i])
    {
        int v=to[i];
        if(fa[x]!=v)
        {
            fa[v]=x;
            dfs1(v);
            siz[x]+=siz[v];
        }
    }
}
void dfs2(int x)
{
    if(!top[x]) top[x]=x;
    int t=0;
    belong[x]=++tim;
    for(int i=head[x];i;i=nextt[i])
    {
        int v=to[i];
        if(fa[x]!=v&&siz[t]<siz[v]) t=v;
    }
    if(t) top[t]=top[x],dfs2(t);
    for(int i=head[x];i;i=nextt[i])
    {
        int v=to[i];
        if(fa[x]!=v&&v!=t) dfs2(v);
    }
}
inline void pushup(Segment *&k) {k->sum=k->ch[0]->sum+k->ch[1]->sum;}
void build(Segment *&k,int l,int r)
{
    k=new Segment;
    k->l=l;k->r=r;
    if(l==r) return;
    k->mid=(l+r)>>1;
    build(k->ch[0],l,k->mid);
    build(k->ch[1],k->mid+1,r);
    pushup(k);
}
void swap(int &m,int &n)
{
    int tmp=n;
    n=m;
    m=tmp;
}
void pushdown(Segment *&k)
{
    if(k->flag==1)
    {
        k->ch[0]->flag=k->flag;
        k->ch[0]->sum=k->ch[0]->r-k->ch[0]->l+1;
        k->ch[1]->flag=k->flag;
        k->ch[1]->sum=k->ch[1]->r-k->ch[1]->l+1;
        k->flag=0;
    }
    else
    {
        k->ch[0]->flag=k->flag;
        k->ch[0]->sum=0;
        k->ch[1]->flag=k->flag;
        k->ch[1]->sum=0;
        k->flag=0;
    }
}
int Tree_Query(Segment *&k,int l,int r)
{
    if(k->l==l&&k->r==r) return k->sum;
    if(k->flag) pushdown(k);
    if(l>k->mid) return Tree_Query(k->ch[1],l,r);
    else if(r<=k->mid) return Tree_Query(k->ch[0],l,r);
    else return Tree_Query(k->ch[0],l,k->mid)+Tree_Query(k->ch[1],k->mid+1,r);
    pushup(k);
}
void Tree_Change(Segment *&k,int l,int r,int opt)
{
    if(k->l==l&&k->r==r)
    {
        k->flag=opt;
        if(opt==1) k->sum=r-l+1;
        else k->sum=0;
        return;
    }
    if(k->flag) pushdown(k);
    if(l>k->mid) Tree_Change(k->ch[1],l,r,opt);
    else if(r<=k->mid) Tree_Change(k->ch[0],l,r,opt);
    else Tree_Change(k->ch[0],l,k->mid,opt),Tree_Change(k->ch[1],k->mid+1,r,opt);
    pushup(k);
}
int Chain_Query(int x,int y)
{
    int ret=0;
    for(;top[x]!=top[y];x=fa[top[x]])
    {
        if(dep[top[x]]<dep[top[y]]) swap(x,y);
        ret+=Tree_Query(root,belong[top[x]],belong[x]);
    }
    if(dep[x]<dep[y]) swap(x,y);
    ret+=Tree_Query(root,belong[y],belong[x]);
    return ret;
}
void Chain_Change(int x,int y,int opt)
{
    for(;top[x]!=top[y];x=fa[top[x]])
    {
        if(dep[top[x]]<dep[top[y]]) swap(x,y);
        Tree_Change(root,belong[top[x]],belong[x],opt);
    }
    if(dep[x]<dep[y]) swap(x,y);
    Tree_Change(root,belong[y],belong[x],opt);
}
inline void ins(int u,int v)
{
    nextt[++cnt]=head[u];
    to[cnt]=v;
    head[u]=cnt;
}
int Main()
{
    scanf("%d",&n);
    for(int pr,i=2;i<=n;++i)
    {
        scanf("%d",&pr);
        ins(i,++pr);
        ins(pr,i);
    }
    dfs1(1);
    dfs2(1);
    build(root,1,n);
    scanf("%d",&q);
    char opt[20];
    for(int x;q--;)
    {
        scanf("%s%d",opt,&x);++x;
        if(opt[0]==‘i‘)
        {
            int ans=Chain_Query(1,x);
            Chain_Change(1,x,1);
            printf("%d\n",dep[x]-ans);
        }
        else
        {
            int ans=Tree_Query(root,belong[x],belong[x]+siz[x]-1);
            Tree_Change(root,belong[x],belong[x]+siz[x]-1,2);
            printf("%d\n",ans);
        }
    }
    return 0;
}
int sb=Main();
int main(int argc,char *argv[]) {;}
时间: 2024-08-03 20:00:30

未完成2130的相关文章

expect 实现交互(未完成)

expect介绍 expect命令是一个实现交互功能的软件套件,是基于TCL的脚本编程语言,在企业运维中,系统会以交互的形式要求运维人员输入指定的字符串,之后才能继续执行命令.例如:为用户设置密码时,一般情况下需要手工输入两次密码,比如使用ssh连接远程服务器时,第一次连和系统实现两次交互. 简单的说,expect用来自动实现与交互程序通信的,无需管理员手工干预 spawn启动指定进程>expect获取期待的关键字>send向指定进程发送字符>进程执行完毕,退出 expect  表达式 

化学方程式配平【测试中】【未完成】

化学元素周期表(Element.txt): 1    H    氢    12    He    氦    43    Li    锂    74    Be    铍    95    B    硼    116    C    碳    127    N    氮    148    O    氧    169    F    氟    1910    Ne    氖    2011    Na    钠    2312    Mg    镁    2413    Al    铝    27

《此生未完成》读后感

曾几何时,看了一遍又一遍<此生未完成>,并非因为它是一个将死之人的生命日记,也并非是想提醒自己应该珍惜当下,好好保养身体,或许是于娟的文笔有触动人心弦的地方,也或许是真心想知道活着的意义吧 书简介 <此生未完成>是于娟临时的生命日记 .于娟--女,山东济宁人,1979年4月-2011年4月.2008年,获复旦大学经济学博士学位. 于娟在2009年12月于娟确诊患乳腺癌后,写下一年多病中日记,在日记中反思生活细节,在生命的最后日子里,于娟完全放下了生死,放下了名利权情,写下了这本&l

Android Configuration介绍 (未完成)

博客很空,想赶紧填一篇东西,选的这个题目看了下中文网络中还不是很常见,但是由于我也不了解全部的configuration,需要验证思路,写起来也很慢,先发个未完成的占座. 所谓Configuration指的是Configuration.java这个类所代表的配置信息,它的位置在($ANDROID_ROOT)/frameworks/base/core/java/android/content/res/Configuration.java 本文分三部分: 一. 逐一讲解成员变量,了解功能和每一个数值

【shell】oracle安装脚本 - 未完成

自动安装oracle所需要的rpm包(需要访问外网): #! /bin/sh rpmpack=" binutils compat-libstdc++* elfutils-libelf elfutils-libelf-devel elfutils-libelf-devel-static gcc gcc-c++ glibc glibc-common glibc-devel glibc-headers kernel-headers ksh libaio libaio-devel libgcc libg

解决yum安装过程中断导致后续使用yum始终提示有未完成事务的问题

今天在用yum装软件的时候手贱点了ctrl+c,在后面使用yum的时候始终提示:There are unfinished transactions remaining. You might consider running yum-complete-transaction first to finish them. 意思是说有未完成的yum事务,建议先运行yum-complete-transaction命令清除 解决办法:安装 yum-complete-transaction,提示中已经给出了这

【未完成】《统计机器翻译》读书笔记:系列0,全书概述与个人总结

说明:本系列文章是本人在阅读统计机器翻译后所做的个人读书笔记,会按照每一章的顺序来按章详细叙述内容总结和习题解答. 系列0:全书概述与个人总结 本书是大牛Philipp Koehn的作品,他是开源项目Moses项目的领导者,具体可以去www.statmt.org/moses/查看,我也会在未来的半个月写一些有关Moses学习的博文. 本书分为三个部分:基础知识(介绍机器翻译需要语言学的基础.概率论的基础).核心方法(基于词的翻译模型.基于短语的翻译模型.解码decoding).前沿研究 在绪论部

leetcode 算法 之 马拉松算法(Manacher&#39;s algorithm)(未完成)

马拉松算法:马拉松算法是用来计算一个字符串中最长的回文字符串(对称字符串,如aba abba). 首先,我们拿到一个字符串S,然后在S中的每个字符之间加#.例如:S="abcb" T="a#b#c#b" 我们T字符串的每一个T[i]向延伸d个字符 使得 T[i-d,i+d]是一个回文字符串.你会立刻发现,d就是以T[i]为中心的最长回文字符串的长度. 我们建立一个P数组,是的P数组的长度等于T的长度,每一个P[i]的值表示对应的T[i]为中心的最大回文字符串的长度.

一个未完成创业项目的思考——创业杂记

在写这篇之前,首先要道歉. 我写这篇东西的目的,原本是为了记录创业几年来的一些历程.但在上一篇<技术型创业者容易遇到的三大问题>中,我对好友的项目多加评论,导致了读者"大灰兔"的质疑.P2P网站中的5000注册用户的确是不少,盈利问题的确也是不错,但大牛君在此地仅仅是一个小技术人员,无股权无期权,只是为了技术爱好去研究一些数据样本.这样一来,在我看还是相对比较耽误时间的.但这都是主观意识,各位读者口味不同,期待还是求同存异.不过,既然之前发生了这样的问题,在之后的文章中,我