暂时不想调的代码 2325

#include <cstdio>
#include <map>
#define N 200000

using std::map;
map<int,bool>q;
int dep[N],fa[N],siz[N],pos[N],dfn[N],tim,top[N],n,cnt,a[N],m;
struct Segment
{
    int l,r,dis,up;
    Segment * ch[2];
};
struct Edge
{
    int to;
    Edge * next;
}edge[N<<1],*head[N];
class SLPF
{
    private:
        inline void pushup(Segment *&k) {k->up=k->ch[0]->up+k->ch[1]->up;}
    public:
        inline void ins(int u,int v)
        {
            edge[++cnt].next=head[u];
            edge[cnt].to=v;
            head[u]=edge+cnt;
        }
        void dfs1(int x)
        {
            dep[x]=dep[fa[x]]+1;
            siz[x]=1;
            for(Edge * u=head[x];u;u=u->next)
            {
                int v=u->to;
                if(fa[x]!=v)
                {
                    fa[v]=x;
                    dfs1(v);
                    siz[x]+=siz[v];
                }
            }
        }
        void dfs2(int x)
        {
            int p=0;
            pos[x]=++tim;
            dfn[tim]=x;
            for(Edge * u=head[x];u;u=u->next)
            {
                int v=u->to;
                if(fa[x]!=v&&siz[p]<siz[v]) p=v;
            }
            if(p) dfs2(p);
            for(Edge * u=head[x];u;u=u->next)
            {
                int v=u->to;
                if(fa[x]!=v&&v!=p) dfs2(v);
            }
        }
        void build(Segment *&k,int l,int r)
        {
            k=new Segment();
            k->l=l;k->r=r;
            if(l==r)
            {
                if(!q[a[dfn[l]]])
                {
                    k->dis=a[dfn[l]];
                    k->up=1;
                    q[a[dfn[l]]]=1;
                }
                else
                {
                    k->dis=0;
                    k->up=0;
                }
                return;
            }
            int mid=(l+r)>>1;
            build(k->ch[0],l,mid);
            build(k->ch[1],mid+1,r);
            pushup(k);
        }
        int Section_Query(Segment *&k,int l,int r)
        {
            if(k->l==l&&k->r==r) return k->up;
            int mid=(k->l+k->r)>>1;
            if(l>mid) return Section_Query(k->ch[1],l,r);
            else if(r<=mid) return Section_Query(k->ch[0],l,r);
            else return Section_Query(k->ch[0],l,mid)+Section_Query(k->ch[1],mid+1,r);
        }
        void modify(Segment *&k,int t,int v,int f)
        {
            if(k->l==k->r) {k->dis=v;k->up=f;return;}
            int mid=(k->l+k->r)>>1;
            if(t<=mid) modify(k->ch[0],t,v,f);
            else modify(k->ch[1],t,v,f);
            pushup(k);
        }
        int Signle_Query(Segment *&k,int t)
        {
            if(k->l==k->r) return k->dis;
            int mid=(k->l+k->r)>>1;
            if(t<=mid) return Signle_Query(k->ch[0],t);
            else return Signle_Query(k->ch[1],t);
        }
        void swap(int &m,int &n)
        {
            int tmp=n;
            n=m;
            m=tmp;
        }
};
class SLPF *abc;
int main()
{
    freopen("zytree1.in","r",stdin);freopen("zytree.out","w",stdout);
    Segment *root=new Segment();
    scanf("%d",&n);
    for(int i=1;i<=n;++i) scanf("%d",&a[i]);
    for(int x,y,i=1;i<n;++i)
    {
        scanf("%d%d",&x,&y);
           if(x>y) abc->swap(x,y);
        abc->ins(x,y);abc->ins(y,x);
    }
    abc->dfs1(1);abc->dfs2(1);
    abc->build(root,1,n);
    scanf("%d",&m);
    for(int opt,x,y;m--;)
    {
        scanf("%d%d",&opt,&x);
        if(opt) printf("%d\n",abc->Section_Query(root,pos[x],pos[x]+siz[x]-1));
        else
        {
            scanf("%d",&y);
            int v=abc->Signle_Query(root,pos[x]);
            q[v]=0;
            if(!q[y]) q[y]=1,abc->modify(root,pos[x],y,1);
            else abc->modify(root,pos[x],0,0);
        }
    }
    return 0;
}
时间: 2024-08-11 09:07:29

暂时不想调的代码 2325的相关文章

想靠写代码吃饭 这些你一定要会

想靠写代码吃饭 这些你一定要会 美国知名求职网站 Indeed 中对于 231 份并不要求计算机系学位的工作中,整理出了你必须会的一些科技技术,让你即使不是计算机系出身,但试着学会这些技术,就可以助你成为一名初级软件工程师. 想靠写代码吃饭,这些你一定要会 Javascript 第一名的是 Javascript ,有 42.4 % 的职缺中都要求必须会这项技能.Javascript 为什么这么厉害?最主要在于网络软件开发的盛行,Javascript 是很多现有的开发框架的基础除了用在前端的开发(

暂时不想读研的几点理由

(我写这篇东西是先放在这里,请注意我用了“暂时”这个词,当我必须做出决定时我再回过头来看看我的想法有没有改变.) 想法: 1.我是一个从来不care title的人(当然你说你是standford,MIT, Harvard等名校的Phd,不用多说了,我立马献上我的膝盖,如果不是,那我可能还得和你聊一下了),我认为一个人如果知道自己想要什么,他可以有很多方法去实现它,也就是说,一个牛逼的人,肯定能找到方法去证明他很牛逼.而一个人如果不知道他想要什么,那么绝对不会因为他考了个研究生而有什么大的改变(

想加入一行代码吗?使用&lt;code&gt;标签

在介绍语言技术的网站中,避免不了在网页中显示一些计算机专业的编程代码,当代码为一行代码时,你就可以使用<code>标签了,如下面例子: <code>var i=i+300;</code> 注意:在文章中一般如果要插入多行代码时不能使用<code>标签了. 语法: <code>代码语言</code> 注:如果是多行代码,可以使用<pre>标签. 示例: <!DOCTYPE HTML> <html> &

ios调打电话代码

// 定义点击拨号按钮时的操作 - (void)callAction{ NSString *number = @"";// 此处读入电话号码 // NSString *num = [[NSString alloc] initWithFormat:@"tel://%@",number]; //number为号码字符串 如果使用这个方法 结束电话之后会进入联系人列表 NSString *num = [[NSString alloc] initWithFormat:@&q

想写好代码,送你三个神器

Tips 做一个终身学习的人. 每个程序员,其中一点让自己感到傲娇的地方,就是能够写出健壮,优美,干净的代码.如果你再拥有这三件神器,你的代码就会如虎添翼,直上云霄三千里. "第一件神器:IntelliJ IDEA" 很多人排斥这个神器的原因是收费的,而且价格还不便宜.但我觉得,这个太值得买了.很多 http://pic.cnhubei.com/space.php?uid=2732&do=album&id=965372http://pic.cnhubei.com/spa

JS调JAVA代码

原文地址:http://droidyue.com/blog/2014/09/20/interaction-between-java-and-javascript-in-android/ Activiy public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setCo

calltree看代码调用图

calltree是在linux下面看c代码(尤其是复杂的内核代码)的神器. 推荐  calltree+vim + ctags + cscope + taglist [ vim: 搭建vim看代码的环境   http://www.cnblogs.com/mylinux/p/5013588.html] 或者 calltree + source insight source insight能方便地查看向上和向下的函数(变量等)调用关系,并且支持多种语言,几乎是无可替代的.但调用深度太大的时候,人就记不

Android Studio代码调试大全

http://blog.csdn.net/dd864140130/article/details/51560664 Android Studio目前已经成为开发android的主要工具,用熟了可谓相当顺手.作为开发者,调试并发现bug,进而解决,可是我们的看家本领.正所谓,工欲善其事必先利其器,和其他开发工具一样,如Eclipse.Idea,Android Studio也为我们提供了强大的调试技巧,今天我们就来看看Android Studio中有关调试的技巧. 首先,来看看Android stu

《重构-改善既有代码的设计》读书笔记

重构,第一个案例 1.1 起点 如果发现现有的代码结构使你无法很方便地添加新特性,那就先重构,使特性的添加比较容易进行后,再添加特性; 1.2 重构的第一步 为即将修改的代码建立可靠的测试环境 – 是人就会犯错,所以需要可靠的测试; 测试结果能够自我检验 – 成功"OK",失败列出失败清单并打印行号 (自动化对比测试结果是提高效率的前提); 1.3 分解并重组"巨型"函数 切分提炼长函数(Extract Method),并移至更合适的类(Move Method) –