//Accepted    6004 KB    924 ms
/*
    source: lightoj1348
    time  :2015.5.29
    by    :songt
  */
/*题解:
树链剖分

  */
#include <cstdio>
#include <cstring>

;
void swap(int &a,int &b)
{
    int t=a;
    a=b;
    b=t;
}
struct Edge
{
    int u,v;
    Edge(){}
    Edge(int u,int v):u(u),v(v){}
}edge[*imax_n];
int head[imax_n];
*imax_n];
int tot;
void addEdge(int u,int v)
{
    edge[tot]=Edge(u,v);
    next[tot]=head[u];
    head[u]=tot++;
}
int fa[imax_n],deep[imax_n],num[imax_n],son[imax_n];
int p[imax_n],fp[imax_n],top[imax_n];
int pos;
void init()
{
    memset(head,-,sizeof(head));
    memset(next,-,sizeof(next));
    tot=;
    memset(son,-,sizeof(son));
    pos=;
}
void dfs1(int u,int pre,int depth)
{
    deep[u]=depth;
    fa[u]=pre;
    num[u]=;
    ;i=next[i])
    {
        int v=edge[i].v;
        if (v!=pre)
        {
            dfs1(v,u,depth+);
            num[u]+=num[v];
             || num[son[u]]<num[v])
                son[u]=v;
        }
    }
}
void dfs2(int u,int sp)
{
    p[u]=pos++;
    fp[p[u]]=u;
    top[u]=sp;
    ) return ;
    dfs2(son[u],sp);
    ;i=next[i])
    {
        int v=edge[i].v;
        if (v!=fa[u] && v!=son[u])
        {
            dfs2(v,v);
        }
    }
}
struct Tree
{
    int l,r;
    int sum;
}f[imax_n*];
int a[imax_n];
void build(int t,int l,int r)
{
    f[t].l=l;
    f[t].r=r;
    f[t].sum=;
    if (l==r)
    {
        f[t].sum=a[fp[l]];
        return ;
    }
    ;
    build(*t,l,mid);
    build(*t+,mid+,r);
    f[t].sum=f[*t].sum+f[*t+].sum;
}
void update(int t,int k,int value)
{
    if (f[t].l==k && f[t].r==k)
    {
        f[t].sum=value;
        return ;
    }
    ;
    *t,k,value);
    *t+,k,value);
    f[t].sum=f[*t].sum+f[*t+].sum;
}
int query(int t,int l,int r)
{
    if (f[t].l==l && f[t].r==r)
    {
        return f[t].sum;
    }
    ;
    *t,l,r);
    else
    {
        *t+,l,r);
        *t,l,mid)+query(*t+,mid+,r);
    }
}
int find(int u,int v)
{
    int f1=top[u],f2=top[v];
    ;
    while (f1!=f2)
    {
        if (deep[f1]<deep[f2])
        {
            swap(f1,f2);
            swap(u,v);
        }
        ans+=query(,p[f1],p[u]);
        u=fa[f1];
        f1=top[u];
    }
    if (deep[u]>deep[v]) swap(u,v);
    ans+=query(,p[u],p[v]);
    return ans;
}
int n,m;

int main()
{
    int T;
    ;
    scanf("%d",&T);
    while (T--)
    {
        printf("Case %d:\n",++t);
        init();
        scanf("%d",&n);
        ;i<n;i++)
        scanf("%d",&a[i]);
        int u,v;
        int c;
        ;i<n-;i++)
        {
            scanf("%d%d",&u,&v);
            addEdge(u,v);
            addEdge(v,u);
        }
        dfs1(,-,);
        dfs2(,);
        build(,,pos-);
        scanf("%d",&m);
        int kind;
        ;i<m;i++)
        {
            scanf("%d%d%d",&kind,&u,&v);
            )
            {
                printf("%d\n",find(u,v));
            }
            else
            {
                update(,p[u],v);
            }
        }
    }
    ;
}

lightoj1348的更多相关文章

  1. LightOJ1348 树链剖分

    简单题,看题目就懂. #include<queue> #include<stack> #include<cmath> #include<cstdio> ...

随机推荐

  1. 1奶茶店创业成本: 2发饰品加盟店创业成本 3眼镜行业店创业成本 从“程序员转行卖烧饼”想到IT人创业

    总结: -------奶茶店创业成本: 而这个奶茶店初期投资是:3万元加盟费+1万元保证金+8000装修+两万设备(冰柜.展示柜.收银机等等).别说赚钱,什么时候把初期投资赚回来呀! 一个店的利润就是 ...

  2. Mysql安装出现=========== install/remove of the Service Denied

    在安装mysql过程中遇到一个问题  install/remove of the Service Denied,这个问题说明自己没有安装和删除的权利,原因是自己在运行cmd过程是没有使用管理员身份运行 ...

  3. Python之路 day3 高阶函数

    #!/usr/bin/env python # -*- coding:utf-8 -*- #Author:ersa """ 变量可以指向函数,函数的参数能接收变量, 那么 ...

  4. secureCRT远程登录工具的颜色配置(转载)

    另外,字体和编码设置(如果需要显示中文):Options->Session Options->Appearance->font(字体:幼圆,字形:常规,大小:小三号,字符集:中文GB ...

  5. Python’s SQLAlchemy vs Other ORMs[转发 1]SQLObject

    SQLObject SQLObject is a Python ORM that maps objects between a SQL database and Python. It is becom ...

  6. php empty,isset,is_null比较(差异与异同)

    php empty,isset,is_null比较(差异与异同)  http://www.cnblogs.com/chengmo/archive/2010/10/18/1854258.html

  7. 动态加载zTree,用key属性设置url链接、icon图标等

      setting 举例 1. 设置 zTree 显示节点时,将 treeNode 的 xUrl 属性当做节点链接的目标 URL var setting = { data: { key: { url: ...

  8. Python 修饰符

    def hello(fn):    def wrapper():        print "hello"        fn()        print "goodb ...

  9. Xcode相关整理

    阅读目录 javadoc格式文档注释插件 xcodekit插件 常用快捷键 XCode中快捷健字符与MAC键盘对应关系: 添加自动生成格式为javadoc文档注释的插件VVDocumenter 首先推 ...

  10. sphinx全文检索功能 | windows下测试 (一)

    前一阵子尝试使用了一下Sphinx,一个能够被各种语言(PHP/Python/Ruby/etc)方便调用的全文检索系统.网上的资料大多是在linux环境下的安装使用,当然,作为生产环境很有必要部署在* ...