如果只有第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]在美妙的数学王国中畅游的更多相关文章

  1. Luogu P4546 [THUWC2017]在美妙的数学王国中畅游

    题意 题意奇奇怪怪,这里就不写了. \(\texttt{Data Range:}1\leq n\leq 10^5,1\leq m\leq 2\times 10^5\) 题解 为什么你们都是卡在数学方面 ...

  2. 洛谷P4546 [THUWC2017]在美妙的数学王国中畅游 [LCT,泰勒展开]

    传送门 毒瘤出题人卡精度-- 思路 看到森林里加边删边,容易想到LCT. 然而LCT上似乎很难实现往一条链里代一个数进去求和,怎么办呢? 善良的出题人在下方给了提示:把奇怪的函数泰勒展开搞成多项式,就 ...

  3. 并不对劲的bzoj5020:loj2289:p4546:[THUWC2017]在美妙的数学王国中畅游

    题目大意 有一个n(\(n\leq 10^5\))个点的森林,每个点\(u\)上有个函数\(f_u(x)\),是形如\(ax+b\)或\(e^{ax+b}\)或\(sin(ax+b)\)的函数,保证当 ...

  4. [THUWC2017]在美妙的数学王国中畅游

    [THUWC2017]在美妙的数学王国中畅游 e和sin信息不能直接合并 泰勒展开,大于21次太小,认为是0,保留前21次多项式即可 然后就把e,sin ,kx+b都变成多项式了,pushup合并 上 ...

  5. [BZOJ5020][THUWC2017]在美妙的数学王国中畅游(LCT)

    5020: [THUWC 2017]在美妙的数学王国中畅游 Time Limit: 80 Sec  Memory Limit: 512 MBSec  Special JudgeSubmit: 323  ...

  6. 题解 洛谷 P4546 【[THUWC2017]在美妙的数学王国中畅游】

    首先发现有连边和删边的操作,所以我们肯定要用\(LCT\)来进行维护. 接下来考虑如何进行\(LCT\)上的信息合并. \(f=1\),则函数为\(f(x)=sin(ax+b)\) \(f=2\),则 ...

  7. Luogu4546 THUWC2017 在美妙的数学王国中畅游 LCT、泰勒展开

    传送门 题意:反正就是一堆操作 LCT总是和玄学东西放在一起我们不妨令$x_0=0.5$(其实取什么都是一样的,但是最好取在$[0,1]$的范围内),将其代入给出的式子,我们得到的$f(x)$的式子就 ...

  8. [THUWC2017]在美妙的数学王国中畅游 LCT+泰勒展开+求导

    p.s. 复合函数求导时千万不能先带值,再求导. 一定要先将符合函数按照求导的规则展开,再带值. 设 $f(x)=g(h(x))$,则对 $f(x)$ 求导: $f'(x)=h'(x)g'(h(x)) ...

  9. [LOJ2289][THUWC2017]在美妙的数学王国中畅游:Link-Cut Tree+泰勒展开

    分析 又有毒瘤出题人把数学题出在树上了. 根据泰勒展开,有: \[e^x=1+\frac{1}{1!}x+\frac{1}{2!}x^2+\frac{1}{3!}x^3+...\] \[sin(x)= ...

随机推荐

  1. 记录Ubuntu14.04 LTS版本中使用Docker的过程

    sudo apt-get update sudo apt-get install \ apt-transport-https \ ca-certificates \ curl \ software-p ...

  2. Loadrunner11代理录制&各个常见功能介绍

    1.代理录制: Lr代理工具:C:\Program Files (x86)\HP\LoadRunner\bin\wplus_init_wsock.exe 1) 设置代理 配置代理信息: 2)设置浏览器 ...

  3. python安装lib库

    time:2015/11/11 双十一 一.初衷 看到一篇帖子[1],里面有python代码,就想实现一下,代码如下: import cv2 as cv import numpy as np from ...

  4. mysql 创建数据数据库 (避免新建的库名已经存在、设置编码)

    1.创建数据库的 create database 数据库名 eg: Create database mydatabase 查看已创建的数据: show databases; 结果: 2.数据库名所对应 ...

  5. Python学习---IO的异步[asyncio模块(no-http)]

    Asyncio进行异步IO请求操作: 1. @asyncio.coroutine  装饰任务函数 2. 函数内配合yield from 和装饰器@asyncio.coroutine 配合使用[固定格式 ...

  6. PHP安装posix、pctl扩展

    安装问题 PHP Fatal error: Uncaught Error: Call to undefined function tsingsun\swoole\server\posix_kill() ...

  7. 数据库初始化以及制作为Windows服务

    前面的博客里我讲述了一些安装过程中会出现的问题以及解决方法,下面我讲一下基本的操作. 1.初始化:(我们要现在数据库里面创建一个data文件,这里是存放数据的地方,所以要是重要的数据已经记得看清楚了删 ...

  8. 数据库服务注册(使用命令注册):解决my.ini配置文件不存在的问题

    注册数据库的时候,有一键式安装,还有一种通过压缩包安装.今天主要来讲一下压缩包安装会出现的问题. 1. 新建一个my.ini文件,里面内容为: [client] port=3306 default-c ...

  9. terminal 总结

    (1) Mac添加命令别名 切换到用户主目录 (2). 编辑或新建.bash_profile文件 (3). 添加别名 alias ll='ls -Alh' (4). 重载该配置文件 source .b ...

  10. 【Jenkins持续集成】好用的插件集合

    1. Promoted Builds Plugin 这个插件在job构建成功后,依据设置条件(仅手动执行/成功时执行等),执行操作(操作和构建过程基本类似),这样我们就可以在构建之后有机会执行拉分支. ...