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)= ...
随机推荐
- git 代码上传至远程仓库&从远程库克隆到本地
1.下载安装Git.下载:https://git-scm.com/downloads 安装:可参考文章http://blog.csdn.net/zzfenglin/article/details/5 ...
- Linux系统设置运行级别
设置运行级别 查看开机加载级别:7个级别 规范场景默认都是3 cat /etc/inittab --> 系统开机启动加载的文件,可以设置运行级别 # Default runlev ...
- 铁乐学Python_day11_闭包函数
一.[函数名] 1)函数名本质上它也是一种变量,特殊的变量: (碰到同名其它变量,依照从上往下的代码执行赋值.) 单独打印函数名,输出的是它对应的内存地址: 例: def funcl(): print ...
- [BZOJ 5252][LOJ 2478][九省联考2018] 林克卡特树
[BZOJ 5252][LOJ 2478][九省联考2018] 林克卡特树 题意 给定一个 \(n\) 个点边带权的无根树, 要求切断其中恰好 \(k\) 条边再连 \(k\) 条边权为 \(0\) ...
- [2018HN省队集训D5T1] 沼泽地marshland
[2018HN省队集训D5T1] 沼泽地marshland 题意 给定一张 \(n\times n\) 的棋盘, 对于位置 \((x,y)\), 若 \(x+y\) 为奇数则可能有一个正权值. 你可以 ...
- Operating System-Thread(3)用户空间和内核空间实现线程
http://www.cnblogs.com/Brake/archive/2015/12/02/Operating_System_Thread_Part3.html 本文主要内容: 操作系统用户空间和 ...
- prometheus-入门尝试
prometheus-入门 Prometheus 是由 SoundCloud 开源监控告警解决方案2015 年在 github 上开源以来,已经吸引了 很多大公司的使用:2016 年 Promethe ...
- 4514: [Sdoi2016]数字配对
Description 有 n 种数字,第 i 种数字是 ai.有 bi 个,权值是 ci. 若两个数字 ai.aj 满足,ai 是 aj 的倍数,且 ai/aj 是一个质数, 那么这两个数字可以配对 ...
- Discuz!教程之删除注释云平台JS,加快DISCUZ访问
很多站长反应打开网站的时候有个http://discuz.gtimg.cn/cloud/scripts/discuz_tips.js?v=1一直在加载中,导致网页打开速度很慢,这个时候你可以按本文教程 ...
- 20155314 2016-2017-2 《Java程序设计》第3周学习总结
20155314 2016-2017-2 <Java程序设计>第3周学习总结 教材学习内容总结 学习目标 区分基本类型与类类型 理解对象的生成与引用的关系 掌握String类和数组 理解封 ...