题目描述

You ye Jiu yuan is the daughter of the Great GOD Emancipator.  And when she becomes an adult, she will be queen of Tusikur, so she wanted to travel the world while she was still young. In a country, she found a small pub called Whitehouse. Just as she was about to go in for a drink, the boss Carola appeared. And ask her to solve this problem or she will not be allowed to enter the pub. The problem description is as follows:
There is a tree with n nodes, each node i contains weight a[i], the initial value of a[i] is 0.  The root number of the tree is 1. Now you need to do the following operations:
1) Multiply all weight on the path from u to v by x
2) For all weight on the path from u to v, increasing x to them
3) For all weight on the path from u to v, change them to the bitwise NOT of them
4) Ask the sum of the weight on the path from u to v
The answer modulo 2^64.

Jiu Yuan is a clever girl, but she was not good at algorithm, so she hopes that you can help her solve this problem. Ding~~~

The bitwise NOT is a unary operation that performs logical negation on each bit, forming the ones' complement of the given binary value. Bits that are 0 become 1, and those that are 1 become 0. For example:

NOT 0111 (decimal 7) = 1000 (decimal 8)
NOT 10101011 = 01010100

输入

The input contains multiple groups of data.
For each group of data, the first line contains a number of n, and the number of nodes.
The second line contains (n - 1) integers bi, which means that the father node of node (i +1) is bi.
The third line contains one integer m, which means the number of operations,
The next m lines contain the following four operations:
At first, we input one integer opt
1) If opt is 1, then input 3 integers, u, v, x, which means multiply all weight on the path from u to v by x
2) If opt is 2, then input 3 integers, u, v, x, which means for all weight on the path from u to v, increasing x to them
3) If opt is 3, then input 2 integers, u, v, which means for all weight on the path from u to v, change them to the bitwise NOT of them
4) If opt is 4, then input 2 integers, u, v, and ask the sum of the weights on the path from u to v

1 ≤ n, m, u, v ≤ 10^5
1 ≤ x < 2^64

输出

For each operation 4, output the answer.

样例输入

7
1 1 1 2 2 4
5
2 5 6 1
1 1 6 2
4 5 6
3 5 2
4 2 2
2
1
4
3 1 2
4 1 2
3 1 1
4 1 1

样例输出

5
18446744073709551613
18446744073709551614
0
题意
给一棵n个节点的有根树,每个节点有权值,初始是0,m次操作
u v x:给u v路径上的点权值*x
u v x:给u v路径上的点权值+x
u v:给u v路径上的点权值取反
u v:询问u v路径上的权值和,对2^64取模 树链剖分:https://wenku.baidu.com/view/a088de01eff9aef8941e06c3.html 然后如果没有取反操作,线段树维护和sum,加法标记add和乘法标记mul即可
对于取反操作,因为是对2^64取模的,即x+(!x)=^-,所以x=(^-)-x,因此取反就变成乘法和加法了:!x=(-)*x+(-) (-1对于2^64取模后是(^-))
#include <bits/stdc++.h>
#define ull unsigned long long
using namespace std;
const int N=1e5+;
int n,m,tot,cnt;
int fa[N],last[N];
int son[N],deep[N],dfn[N],num[N],top[N];//重儿子 深度 dfs序 子树规模 所在重链的顶端节点
ull sum[N*],add[N*],mul[N*];
struct orz{
int v,nex;}e[N];
void init()
{
cnt=;
tot=;
memset(last,,sizeof(last));
memset(son,-,sizeof(son));
}
void Inses(int x,int y)
{
cnt++;
e[cnt].v=y;
e[cnt].nex=last[x];
last[x]=cnt;
}
void dfs1(int x,int d)
{
deep[x]=d;
num[x]=;
for (int i=last[x];i;i=e[i].nex)
{
int v=e[i].v;
dfs1(v,d+);
num[x]+=num[v];
if (son[x]==- || num[v]>num[son[x]]) son[x]=v;
}
}
void dfs2(int x,int sp)
{
top[x]=sp;
dfn[x]=++tot;
if (son[x]==-) return ;
dfs2(son[x],sp);
for (int i=last[x];i;i=e[i].nex)
{
int v=e[i].v;
if (v!=son[x]) dfs2(v,v);
}
}
void PushUp(int s)
{
sum[s]=sum[s<<]+sum[s<<|];
}
void PushDown(int s,int l,int r)
{
if (mul[s]!=)
{
mul[s<<]*=mul[s];
mul[s<<|]*=mul[s];
add[s<<]*=mul[s];
add[s<<|]*=mul[s];
sum[s<<]*=mul[s];
sum[s<<|]*=mul[s];
mul[s]=;
} if (add[s])
{
add[s<<]+=add[s];
add[s<<|]+=add[s];
int mid=(l+r)>>;
sum[s<<]+=(ull)(mid-l+)*add[s];
sum[s<<|]+=(ull)(r-mid)*add[s];
add[s]=;
}
} void build(int s,int l,int r)
{
sum[s]=add[s]=;
mul[s]=;
if (l==r) return ;
int m=(l+r)>>;
build(s<<,l,m); build(s<<|,m+,r);
PushUp(s);
}
void update(int s,int l,int r,int L,int R,ull val,int op)
{
//printf("s=%d,l=%d,r=%d,L=%d,R=%d\n",s,l,r,L,R);
if (L<=l&&r<=R)
{
if (l!=r) PushDown(s,l,r);
if (op==)
{
mul[s]*=val;
add[s]*=val;
sum[s]*=val;
}
else if (op==)
{
add[s]+=val;
sum[s]+=(ull)(r-l+)*val;
}
else
{
mul[s]*=val;
add[s]*=val;
add[s]+=val;
sum[s]=(ull)(r-l+)*val-sum[s];
}
return;
}
PushDown(s,l,r);
int mid=(l+r)>>;
if (L<=mid) update(s<<,l,mid,L,R,val,op);
if (R>mid) update(s<<|,mid+,r,L,R,val,op);
PushUp(s);
}
ull query(int s,int l,int r,int L,int R)
{
if (L<=l&&r<=R) return sum[s];
PushDown(s,l,r);
int mid=(l+r)>>;
ull ans=;
if (L<=mid) ans+=query(s<<,l,mid,L,R);
if (R>mid) ans+=query(s<<|,mid+,r,L,R);
PushUp(s);
return ans;
}
void solve(int op,int x, int y,ull val)
{
if (op==) val=-;
if (op<=)
{
while (top[x]!=top[y])
{
if (deep[top[x]]<deep[top[y]]) swap(x, y);
update(,,n,dfn[top[x]],dfn[x],val,op);
x=fa[top[x]];
}
if (deep[x]>deep[y]) swap(x,y);
update(,,n,dfn[x],dfn[y],val,op);
}
else
{
ull ans=;
while (top[x]!=top[y])
{
if (deep[top[x]]<deep[top[y]]) swap(x, y);
ans+=query(,,n,dfn[top[x]],dfn[x]);
x=fa[top[x]];
}
if (deep[x]>deep[y]) swap(x,y);
ans+=query(,,n,dfn[x],dfn[y]);
printf("%llu\n",ans);
}
} int main()
{
while (scanf("%d",&n)!=EOF)
{
init();
for (int i=;i<=n;i++)
{
scanf("%d",&fa[i]);
Inses(fa[i],i);
}
dfs1(,);
dfs2(,);
build(,,n);
scanf("%d",&m);
int op,u,v; ull x;
while (m--)
{
scanf("%d",&op);
if (op== || op==) scanf("%d%d%llu",&u,&v,&x);
else scanf("%d%d",&u,&v);
solve(op,u,v,x);
}
}
return ;
}
 

2018焦作网络赛-E- Jiu Yuan Wants to Eat的更多相关文章

  1. 2018 ICPC 焦作网络赛 E.Jiu Yuan Wants to Eat

    题意:四个操作,区间加,区间每个数乘,区间的数变成 2^64-1-x,求区间和. 题解:2^64-1-x=(2^64-1)-x 因为模数为2^64,-x%2^64=-1*x%2^64 由负数取模的性质 ...

  2. ACM-ICPC 2018 焦作赛区网络预赛 E Jiu Yuan Wants to Eat (树链剖分+线段树)

    题目链接:https://nanti.jisuanke.com/t/31714 题意:给你一棵树,初始全为0,有四种操作: 1.u-v乘x    2.u-v加x   3. u-v取反  4.询问u-v ...

  3. ACM-ICPC 2018 焦作赛区网络预赛 E. Jiu Yuan Wants to Eat (树链剖分-线性变换线段树)

    树链剖分若不会的话可自行学习一下. 前两种操作是线性变换,模\(2^{64}\)可将线段树全部用unsigned long long 保存,另其自然溢出. 而取反操作比较不能直接处理,因为其模\(2^ ...

  4. 2018焦作网络赛Mathematical Curse

    题意:开始有个数k,有个数组和几个运算符.遍历数组的过程中花费一个运算符和数组当前元素运算.运算符必须按顺序花费,并且最后要花费完.问得到最大结果. 用maxv[x][y]记录到第x个元素,用完了第y ...

  5. 2018焦作网络赛Give Candies

    一开始忽略了欧拉定理指数部分是modphi(n-1)没有memset,减法后面没加0:

  6. 2018焦作网络赛 - Poor God Water 一道水题的教训

    本题算是签到题,但由于赛中花费了过多的时间去滴吧格,造成了不必要的浪费以及智商掉线,所以有必要记录一下坑点 题意:方格从1到n,每一格mjl可以选择吃鱼/巧克力/鸡腿,求走到n格时满足 1.每三格不可 ...

  7. ACM-ICPC 2018 焦作网络赛

    题目顺序:A F G H I K L 做题链接 A. Magic Mirror 题意:判断 给出的 字符串 是否等于"jessie",需要判断大小写 题解:1.用stl库 tolo ...

  8. 2018 焦作网络赛 K Transport Ship ( 二进制优化 01 背包 )

    题目链接 题意 : 给出若干个物品的数量和单个的重量.问你能不能刚好组成总重 S 分析 : 由于物品过多.想到二进制优化 其实这篇博客就是存个二进制优化的写法 关于二进制优化的详情.百度一下有更多资料 ...

  9. 2018 焦作网络赛 G Give Candies ( 欧拉降幂 )

    题目链接 题意 : 给出 N 个糖果.老师按顺序给 1~N 编号的学生分配糖果.每个学生要么不分.要么最少分一个.且由于是按顺序发放.那么对于某个有分到糖果的编号为 i 的学生.则 1~(i-1) 这 ...

随机推荐

  1. mysql中查看所有表、表字段、表注释、字段注释

    查看所有表和表注释 select TABLE_NAME, TABLE_COMMENT from INFORMATION_SCHEMA.Tables where table_schema = '某数据库 ...

  2. mongodb增删改查基础语法

    转载:https://blog.csdn.net/u012206617/article/details/91047239 1. use DataBaseName 切换/创建数据库use mydb 2. ...

  3. pipeline语法之判断一个文件存在与否

    先看一个例子,原理,根据命令返回的状态值来判断它的存在与否 pipeline { agent any stages { stage("check file if exists"){ ...

  4. Delphi 字符串函数SysUtils单元 AnsiSameStr、AnsiSameText、AnsiCompareStr、AnsiCompareText、AnsiCompareFileName、AnsiUpperCase、AnsiLowerCase、AnsiUpperCaseFileName、AnsiLowerCaseFileName、AnsiPos、AnsiQuotedStr

    USES 单元 SysUtils 非 StrUtils AnsiSameStr.AnsiSameText.AnsiCompareStr.AnsiCompareText.AnsiCompareFileN ...

  5. web,xmlSecurity

    <?xml version="1.0" encoding="UTF-8"?><web-app xmlns:xsi="http://w ...

  6. comet4j js中写法

    <script type="text/javascript" src="${ctxStatic}/common/js/comet4j.js">< ...

  7. bzoj 1876

    传送门 http://www.lydsy.com/JudgeOnline/problem.php?id=1876 二进制gcd 学到了(' '      ) 高精还得压位,最开始没写压位,然后调了1h ...

  8. kubernetes批量删除pod

    监控页面出现看到有运行失败的pod 1) 查看有哪些不运行的podcustom-metrics-apiserver日志占满空间被驱逐 [root@hadoop03 ~]# kubectl get po ...

  9. Python每日一题 008

    题目 基于多线程的网络爬虫项目,爬取该站点http://www.tvtv.hk 的电视剧收视率排行榜 分析 robots.txt User-agent: Yisouspider Disallow: / ...

  10. GO 学习资源收集

     golang图书,在线阅读Go轻松学https://www.golang123.com/book/16 Go示例学https://www.golang123.com/book/17 Go Web 编 ...