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)= ...
随机推荐
- FileTable的创建和使用
1. 首先要在实例级别启用FILESTREAM,打开Sql Server Configuration Manager窗口,双击需要设置的SQL SERVER实例进行设置. 2. 需要更改 SQL SE ...
- 使用GPUImage渲染图片教程
使用GPUImage渲染图片教程 Prepare - 准备 GPUImage开源库并不像普通的开源库那样子,拖进你的工程中就可以用.以下将详细的告诉你如何将GPUImage导入到你的工程当中. 首先上 ...
- python升级 (2.6升级到3.5)
在引用模块pandas时竟然提示不支持2.6, 果断升级,在网上找了很多博客,觉得这个比较清楚(https://blog.csdn.net/my_bai/article/details/7289602 ...
- 解决Failed to load the JNI shared library xxx/xxx/jvm.dll 错误
原因:jdk发生变化(新装了32位jdk),eclipse在启动时使用了 系统环境变量中的jdk路径(32位). 解决:只要把旧的64位的jre路径指定给eclipse启动文件即可. 在eclipse ...
- 各个系统Docker安装
Ubuntu 1.Ubuntu 14.04及以上版本 Ubuntu 14.04版本官方软件源已经自带了Docker包,可以直接安装: $ sudo apt-get update $ sudo apt- ...
- spark-submit提交参数设置
/apps/app/spark-1.6.1-bin-hadoop2.6/bin/spark-submit --class com.zdhy.zoc2.sparksql.core.JavaSparkSq ...
- [EffectiveC++]item45:运用成员函数模板接受所有兼容类型
- 自定义input[type="checkbox"]的样式
对复选框自定义样式,我们以前一直用的脚本来实现,不过现在可以使用新的伪类 :checkbox 来实现. 如果直接对复选框设置样式,那么这个伪类并不实用,因为没有多少样式能够对复选框起作用.不过,倒是可 ...
- 2733. [HNOI2012]永无乡【平衡树-splay】
Description 永无乡包含 n 座岛,编号从 1 到 n,每座岛都有自己的独一无二的重要度,按照重要度可 以将这 n 座岛排名,名次用 1 到 n 来表示.某些岛之间由巨大的桥连接,通过桥可以 ...
- JAVA构造MAP并初始化MAP
第一种方法:static块初始化 public class Demo{ private static final Map<String, String> myMap; static { m ...