NOIP 模拟 $34\; \rm Equation$
题解 \(by\;zj\varphi\)
发现每个点的权值都可以表示成 \(\rm k\pm x\)。
那么对于新增的方程,\(\rm x_u+x_v=k\pm x/0\) 且 \(\rm x_u+x_v=s\)。
如果 \(x\) 项系数为 \(0\),那么就只需判断 \(\rm x_u+x_v=s\) 有无解。
若不为 \(0\),那么直接解出 \(x_1\) 并判断是否是小数即可。
修改操作就是对一段区间的值加或减,直接树状数组,复杂度 \(\mathcal O\rm((n+q)logn)\)
Code
#include<bits/stdc++.h>
#define ri register signed
#define p(i) ++i
namespace IO{
char buf[1<<21],*p1=buf,*p2=buf;
#define gc() p1==p2&&(p2=(p1=buf)+fread(buf,1,1<<21,stdin),p1==p2)?(-1):*p1++
struct nanfeng_stream{
template<typename T>inline nanfeng_stream operator>>(T &x) {
ri f=0;x=0;register char ch=gc();
while(!isdigit(ch)) f|=ch=='-',ch=gc();
while(isdigit(ch)) x=(x<<1)+(x<<3)+(ch^48),ch=gc();
return x=f?-x:x,*this;
}
}cin;
}
using IO::cin;
namespace nanfeng{
#define FI FILE *IN
#define FO FILE *OUT
template<typename T>inline T cmax(T x,T y) {return x>y?x:y;}
template<typename T>inline T cmin(T x,T y) {return x>y?y:x;}
typedef long long ll;
static const int N=1e6+7;
int first[N],dep[N],ld[N],rd[N],ww[N],n,q,tot,t=1,opt,u,v;
ll W[N],s;
struct BIT{
#define lowbit(x) ((x)&-(x))
ll c[N];
inline void update(int x,ll k) {for (ri i(x);i<=n;i+=lowbit(i)) c[i]+=k;}
inline ll query(int x) {
ll res(0);
for (ri i(x);i;i-=lowbit(i)) res+=c[i];
return res;
}
}B;
struct edge{int v,w,nxt;}e[N];
inline void add(int u,int v,int w) {e[t].v=v,e[t].w=w,e[t].nxt=first[u],first[u]=t++;}
void dfs(int x,ll w) {
W[ld[x]=p(tot)]=w;
for (ri i(first[x]),v;i;i=e[i].nxt) {
dep[v=e[i].v]=dep[x]+1;
if (dep[v]&1) dfs(v,w-e[i].w);
else dfs(v,w+e[i].w);
}
rd[x]=tot;
}
inline int main() {
//FI=freopen("nanfeng.in","r",stdin);
//FO=freopen("nanfeng.out","w",stdout);
cin >> n >> q;
for (ri i(2),f;i<=n;p(i)) cin >> f >> ww[i],add(f,i,ww[i]);
dfs(1,0);
for (ri i(1),w;i<=tot;p(i)) w=W[i]-W[i-1],B.update(i,w);
for (ri i(1);i<=q;p(i)) {
cin >> opt;
if (opt==2) {
cin >> u >> s;
if (dep[u]&1) B.update(ld[u],-s+ww[u]),B.update(rd[u]+1,s-ww[u]);
else B.update(ld[u],s-ww[u]),B.update(rd[u]+1,-s+ww[u]);
ww[u]=s;
} else {
cin >> u >> v >> s;
ri jd(0);
register ll tmp1=B.query(ld[u]),tmp2=B.query(ld[v]);
if (dep[u]&1) --jd,tmp1*=-1ll;else p(jd);
if (dep[v]&1) --jd,tmp2*=-1ll;else p(jd);
if (!jd) {
if (tmp1+tmp2!=s) puts("none");
else puts("inf");
} else if (jd==2) {
register ll ans=(s-tmp1-tmp2)>>1ll;
if ((ans<<1ll)+tmp1+tmp2==s) printf("%lld\n",ans);
else puts("none");
} else {
register ll ans=(tmp1+tmp2-s)>>1ll;
if ((ans<<1ll)+s==tmp1+tmp2) printf("%lld\n",ans);
else puts("none");
}
}
}
return 0;
}
}
int main() {return nanfeng::main();}
NOIP 模拟 $34\; \rm Equation$的更多相关文章
- NOIP 模拟 $34\; \rm Rectangle$
题解 \(by\;zj\varphi\) 对于没有在同一行或同一列的情况,直接枚举右边界,左边界从大到小,用树状数组维护上下边界即可. 而对于有多个在一列或一行的情况,这些点将左右分成了几个区间,枚举 ...
- NOIP 模拟 $34\; \rm Merchant$
题解 \(by\;zj\varphi\) 对于选的物品,总值一定有在前一段区间递减,后一段递增的性质,那么就可以二分. check()时只递归归并大的一段,用nth_element即可 Code #i ...
- noip模拟34[惨败]
noip模拟34 solutions 我从来不为失败找借口,因为败了就是败了,没人听你诉说任何事情 今天很伤感,以来考试没考好,二来改题改半天也改不出来 这次算是炸出来了我经常范的一些错误,比如除以0 ...
- NOIP模拟 1
NOIP模拟1,到现在时间已经比较长了.. 那天是6.14,今天7.18了 //然鹅我看着最前边缺失的模拟1,还是终于忍不住把它补上,为了保持顺序2345重新发布了一遍.. # 用 户 名 ...
- 2021.5.22 noip模拟1
这场考试考得很烂 连暴力都没打好 只拿了25分,,,,,,,,好好总结 T1序列 A. 序列 题目描述 HZ每周一都要举行升旗仪式,国旗班会站成一整列整齐的向前行进. 郭神作为摄像师想要选取其中一段照 ...
- NOIP模拟3
期望得分:30+90+100=220 实际得分:30+0+10=40 T1智障错误:n*m是n行m列,硬是做成了m行n列 T2智障错误:读入三个数写了两个%d T3智障错误:数值相同不代表是同一个数 ...
- 7.22 NOIP模拟7
又是炸掉的一次考试 T1.方程的解 本次考试最容易骗分的一道题,但是由于T2花的时间太多,我竟然连a+b=c都没判..暴力掉了40分. 首先a+b=c,只有一组解. 然后是a=1,b=1,答案是c-1 ...
- 20190725 NOIP模拟8
今天起来就是虚的一批,然后7.15开始考试,整个前半个小时异常的困,然后一看题,T1一眼就看出了是KMP,但是完了,自己KMP的打法忘的一干二净,然后开始打T2,T2肝了一个tarjan点双就扔上去了 ...
- 20190902+0903合集-NOIP模拟
一直没时间写QwQ 于是补一下. Day 1 晚饭吃的有点恶心…… $1s\,2s\,5s$ 还开 -O2 ?? 有点恐怖. T1 猛的一想: 把外面设成一个点, 向入口连一条权为排队时间的边 从出口 ...
随机推荐
- WPF技巧:命中测试在视觉树中的使用
我们有时候又需求从当前视觉树中找一些东西,比如鼠标按下的时候,看看鼠标下的元素都有什么.又比如某块区域下有哪些元素?某个坐标点下有哪些元素? 这些需求在使用 命中测试的时候,可以非常方便和快速的去找到 ...
- Docker基础:VMware虚拟机Centos7环境下docker安装及使用
1.docker简介 2.docker安装 3.卸载docker 4.阿里云镜像加速 5.docker的常用命令 5.1 帮助命令 5.2 镜像命令 5.3 容器命令 5.4 后台启动命令 5.5 查 ...
- 关于kong | API Gateway
目录 为什么需要 API 网关(more) kong的概念 为什么使用Kong Kong 的管理方式 高可扩展性的背后-插件机制 [前言]: Kong是一个云原生,高效,可扩展的分布式 API 网关. ...
- 「AGC032E」 Modulo Pairing
「AGC032E」 Modulo Pairing 传送门 如果所有数都 \(<\lfloor \frac m 2\rfloor\),一个自然的想法是对所有数排序过后大小搭配,这样显然是最优秀的. ...
- Shell循环语句for、while、until
Shell循环语句for.while.until 一.条件测试 二.删除字符 三.循环语句 示例1 ...
- VS Code 下载安装并设置中文面板显示
下载: 下载地址:https://code.visualstudio.com/ 微软在2015年4月30日Build 开发者大会上正式宣布了 Visual Studio Code 项目:一个运行于 M ...
- 剖析:如何用 SwitchUI 5天写一个微信 —— 聊天界面篇
前置资源 GitHub: SwiftUI-WeChatDemo 第零章:用 SwiftUI 五天组装一个微信 - wavky - 博客园 整体结构 UI 部分代码分布如上图所示,App 的主入口类为 ...
- 【动画消消乐】HTML+CSS 自定义加载动画:清新折叠方块效果 063(附源码及原理详解)
前言 Hello!小伙伴! 非常感谢您阅读海轰的文章,倘若文中有错误的地方,欢迎您指出- 自我介绍ଘ(੭ˊᵕˋ)੭ 昵称:海轰 标签:程序猿|C++选手|学生 简介:因C语言结识编程,随后转入计算机专 ...
- Java电话薄项目(Java基础入门)
面向对象程序设计(Java基础) 1.项目介绍: 该项目能够实现对电话薄的添加,查找,修改,删除,排序等基本操作. 用户进入系统中首先进入主菜单中,在主菜单中可以选择相应的操作,用户可以选择每项操作前 ...
- poj1182:食物链
poj1182:食物链 听说是poj中最经典的一道并查集题目.我一做,果然很经典呢!好难啊!!!真的琢磨了很久还弄懂.这道题的重点就在于怎么用并查集表示题目中的关系环. 1. 题干 原题传送门1 原题 ...