P4546 [THUWC2017]在美妙的数学王国中畅游
如果只有第3个操作,那么这就是个sd题,随便lct搞搞就过去了
然后就是一个神仙东西 taylor公式
我不会,看gsy博客https://www.cnblogs.com/zhoushuyu/p/8148732.html
#include<bits/stdc++.h>
#define il inline
#define vd void
typedef long long ll;
#define maxn 100010
#define k 16
il int gi(){
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;
ch=getchar();
}
while(isdigit(ch))x=x*10+ch-'0',ch=getchar();
return x*f;
}
int F[maxn];double A[maxn],B[maxn];
int ch[maxn][2],fa[maxn];
double f[maxn][k];
bool rev[maxn];
il bool isrt(int x){return ch[fa[x]][0]!=x&&ch[fa[x]][1]!=x;}
il vd Rev(int x){if(x)rev[x]^=1,std::swap(ch[x][0],ch[x][1]);}
il vd down(int x){
if(!isrt(x))down(fa[x]);
if(rev[x])Rev(ch[x][0]),Rev(ch[x][1]),rev[x]=0;
}
il vd upd(int x){
for(int i=0;i<16;++i)f[x][i]=f[ch[x][0]][i]+f[ch[x][1]][i];
if(F[x]==1){
double val=1,Sin=sin(B[x]),Cos=cos(B[x]);
for(int i=0;i<k;i+=4){
f[x][i]+=Sin*val,val*=A[x];
f[x][i+1]+=Cos*val,val*=A[x];
f[x][i+2]-=Sin*val,val*=A[x];
f[x][i+3]-=Cos*val,val*=A[x];
}
}else if(F[x]==2){
double val=exp(B[x]);
for(int i=0;i<k;++i)f[x][i]+=val,val*=A[x];
}else f[x][0]+=B[x],f[x][1]+=A[x];
}
il vd rotate(int x){
int y=fa[x],z=fa[y],o=ch[y][1]==x;
fa[x]=z;if(!isrt(y))ch[z][y==ch[z][1]]=x;
ch[y][o]=ch[x][!o];fa[ch[x][!o]]=y;
ch[x][!o]=y,fa[y]=x;
upd(y);
}
il vd splay(int x){
down(x);
for(int y=fa[x],z=fa[y];!isrt(x);rotate(x),y=fa[x],z=fa[y])
if(!isrt(y))rotate(((ch[y][1]==x)==(ch[z][1]==y))?y:x);
upd(x);
}
il vd access(int x){for(int y=0;x;x=fa[y=x])splay(x),ch[x][1]=y,upd(x);}
il vd makert(int x){access(x),splay(x),Rev(x);}
il vd link(int x,int y){makert(x),fa[x]=y;}
il vd cut(int x,int y){makert(x),access(y),splay(y),ch[y][0]=fa[x]=0,upd(y);}
il int find(int x){access(x);splay(x);while(ch[x][0])x=ch[x][0];return x;}
double p[k];
int main(){
#ifndef ONLINE_JUDGE
freopen("4546.in","r",stdin);
freopen("4546.out","w",stdout);
#endif
p[0]=1;for(int i=1;i<k;++i)p[i]=p[i-1]*i;
int n=gi(),m=gi();scanf("%*s");
for(int i=1;i<=n;++i)F[i]=gi(),scanf("%lf%lf",&A[i],&B[i]),upd(i);
char opt[10];
int u,v;
while(m--){
scanf("%s",opt);
if(opt[0]=='a')u=gi(),v=gi(),link(u+1,v+1);
else if(opt[0]=='d')u=gi(),v=gi(),cut(u+1,v+1);
else if(opt[0]=='m')u=gi()+1,makert(u),F[u]=gi(),scanf("%lf%lf",&A[u],&B[u]),upd(u);
else{
u=gi()+1,v=gi()+1;
double X,ans=0,pX;scanf("%lf",&X);pX=1;
if(find(u)!=find(v)){puts("unreachable");continue;}
makert(u),access(v),splay(v);
for(int i=0;i<k;++i)ans+=f[v][i]*pX/p[i],pX*=X;
printf("%.8e\n",ans);
}
}
return 0;
}
虽然我不会,但我在BZOJ上的时间吊打了gsy
P4546 [THUWC2017]在美妙的数学王国中畅游的更多相关文章
- Luogu P4546 [THUWC2017]在美妙的数学王国中畅游
题意 题意奇奇怪怪,这里就不写了. \(\texttt{Data Range:}1\leq n\leq 10^5,1\leq m\leq 2\times 10^5\) 题解 为什么你们都是卡在数学方面 ...
- 洛谷P4546 [THUWC2017]在美妙的数学王国中畅游 [LCT,泰勒展开]
传送门 毒瘤出题人卡精度-- 思路 看到森林里加边删边,容易想到LCT. 然而LCT上似乎很难实现往一条链里代一个数进去求和,怎么办呢? 善良的出题人在下方给了提示:把奇怪的函数泰勒展开搞成多项式,就 ...
- 并不对劲的bzoj5020:loj2289:p4546:[THUWC2017]在美妙的数学王国中畅游
题目大意 有一个n(\(n\leq 10^5\))个点的森林,每个点\(u\)上有个函数\(f_u(x)\),是形如\(ax+b\)或\(e^{ax+b}\)或\(sin(ax+b)\)的函数,保证当 ...
- [THUWC2017]在美妙的数学王国中畅游
[THUWC2017]在美妙的数学王国中畅游 e和sin信息不能直接合并 泰勒展开,大于21次太小,认为是0,保留前21次多项式即可 然后就把e,sin ,kx+b都变成多项式了,pushup合并 上 ...
- [BZOJ5020][THUWC2017]在美妙的数学王国中畅游(LCT)
5020: [THUWC 2017]在美妙的数学王国中畅游 Time Limit: 80 Sec Memory Limit: 512 MBSec Special JudgeSubmit: 323 ...
- 题解 洛谷 P4546 【[THUWC2017]在美妙的数学王国中畅游】
首先发现有连边和删边的操作,所以我们肯定要用\(LCT\)来进行维护. 接下来考虑如何进行\(LCT\)上的信息合并. \(f=1\),则函数为\(f(x)=sin(ax+b)\) \(f=2\),则 ...
- Luogu4546 THUWC2017 在美妙的数学王国中畅游 LCT、泰勒展开
传送门 题意:反正就是一堆操作 LCT总是和玄学东西放在一起我们不妨令$x_0=0.5$(其实取什么都是一样的,但是最好取在$[0,1]$的范围内),将其代入给出的式子,我们得到的$f(x)$的式子就 ...
- [THUWC2017]在美妙的数学王国中畅游 LCT+泰勒展开+求导
p.s. 复合函数求导时千万不能先带值,再求导. 一定要先将符合函数按照求导的规则展开,再带值. 设 $f(x)=g(h(x))$,则对 $f(x)$ 求导: $f'(x)=h'(x)g'(h(x)) ...
- [LOJ2289][THUWC2017]在美妙的数学王国中畅游:Link-Cut Tree+泰勒展开
分析 又有毒瘤出题人把数学题出在树上了. 根据泰勒展开,有: \[e^x=1+\frac{1}{1!}x+\frac{1}{2!}x^2+\frac{1}{3!}x^3+...\] \[sin(x)= ...
随机推荐
- MySQL binlog格式解析
MySQL binlog格式解析 binlog想必大家都不陌生,在主从复制或者某些情况下的数据恢复会用到.由于binlog是二进制数据,要查看一般都借助mysqlbinlog工具.这篇笔记分析了b ...
- javascript中return的作用
这里面的return含有一些细节知识: 例如:onClick='return add_onclick()'与 onClick='add_onclick()'的区别 JAVASCRIPT在事件中调用函数 ...
- 使用CoreData [4]
使用CoreData [4] 此片文章主要是分析如何对CoreData进行封装. 在开始之前,我们需要弄明白3个非常关键的类,以下翻译凑合着看看. NSManagedObjectContext An ...
- jQuery插件实例三:图片滚动[切换]效果一
图片切换效果在很多网站上都能看到,是一种常见的广告/活动宣传方式,通常位于网页上端.这个插件是众多图片切换效果的形式中的一种,数据源可在前端配置,也可从后台通JSON格式传输数据,当然,数据格式是固定 ...
- SQL——快速定位相关的外键表
- [2018HN省队集训D8T1] 杀毒软件
[2018HN省队集训D8T1] 杀毒软件 题意 给定一个 \(m\) 个01串的字典以及一个长度为 \(n\) 的 01? 序列. 对这个序列进行 \(q\) 次操作, 修改某个位置的字符情况以及查 ...
- caioj 1172 poj 2823 单调队列过渡题
给定一个n个数的数列,从左至右输出每个长度为m的数列段内的最大数. 输入:第一行两个整数n和m( 1<= n <= 20 0000,m<=n).下来给出n个整数. 输出:一行一个整数 ...
- upper_bound()与lower_bound()的使用
upper_bound()与lower_bound()的使用 c++中的许多库函数可以使我们的代码量大大减少,也可使问题简单化.很早之前就接触了upper_bound()与lower_bound(), ...
- Connection:Keep-alive
名词解释: HTTP无状态:无状态是指协议对于事务处理没有记忆能力,服务器不知道客户端是什么状态.从另一方面讲,打开一个服务器上的网页和你之前打开这个服务器上的网页之间没有任何联系 如果你要实现一个购 ...
- MySQL管理.md
用户管理 创建 举例 mysql> create user test@localhost identified by 'password'; Query OK, 0 rows affected ...