传送门


毒瘤出题人卡精度……


思路

看到森林里加边删边,容易想到LCT。

然而LCT上似乎很难实现往一条链里代一个数进去求和,怎么办呢?

善良的出题人在下方给了提示:把奇怪的函数泰勒展开搞成多项式,就很好维护了。

注意到数都很小,精度问题不会太大(那你还被卡),可以直接在\(0\)处泰勒展开更为方便。

然后就做完啦~


代码

要开O2才能过QwQ

#include<bits/stdc++.h>
namespace my_std{
using namespace std;
#define pii pair<int,int>
#define fir first
#define sec second
#define MP make_pair
#define rep(i,x,y) for (int i=(x);i<=(y);i++)
#define drep(i,x,y) for (int i=(x);i>=(y);i--)
#define go(x) for (int i=head[x];i;i=edge[i].nxt)
#define sz 100101
typedef long long ll;
template<typename T>
inline void read(T& t)
{
t=0;char f=0,ch=getchar();
double d=0.1;
while(ch>'9'||ch<'0') f|=(ch=='-'),ch=getchar();
while(ch<='9'&&ch>='0') t=t*10+ch-48,ch=getchar();
if(ch=='.')
{
ch=getchar();
while(ch<='9'&&ch>='0') t+=d*(ch^48),d*=0.1,ch=getchar();
}
t=(f?-t:t);
}
template<typename T,typename... Args>
inline void read(T& t,Args&... args){read(t); read(args...);}
void file()
{
#ifndef ONLINE_JUDGE
freopen("a.txt","r",stdin);
#endif
}
// inline ll mul(ll a,ll b){ll d=(ll)(a*(double)b/mod+0.5);ll ret=a*b-d*mod;if (ret<0) ret+=mod;return ret;}
}
using namespace my_std;
typedef long double db; #define B 20
namespace LCT
{
int fa[sz],ch[sz][2];
db sum[sz][B+5],a[sz][B+5];
bool tag[sz];
#define ls ch[x][0]
#define rs ch[x][1]
#define I inline
I bool get(int x){return ch[fa[x]][1]==x;}
I bool nroot(int x){return ch[fa[x]][0]==x||ch[fa[x]][1]==x;}
I void rev(int x){tag[x]^=1;swap(ls,rs);}
I void pushup(int x){rep(i,0,B) sum[x][i]=sum[ls][i]+sum[rs][i]+a[x][i];}
I void pushdown(int x){ if (!x||!tag[x]) return; rev(ls); rev(rs); tag[x]=0; }
I void rotate(int x)
{
int y=fa[x],z=fa[y],k=get(x),w=ch[x][!k];
if (nroot(y)) ch[z][get(y)]=x;ch[x][!k]=y;ch[y][k]=w;
if (w) fa[w]=y;fa[y]=x;fa[x]=z;
pushup(y);pushup(x);
}
void Pushdown(int x){if (nroot(x)) Pushdown(fa[x]);pushdown(x);}
I void splay(int x)
{
Pushdown(x);
while (nroot(x))
{
int y=fa[x];
if (nroot(y)) rotate(get(x)==get(y)?y:x);
rotate(x);
}
}
void access(int x){for (int y=0;x;x=fa[y=x]) splay(x),rs=y,pushup(x);}
void makeroot(int x){access(x);splay(x);rev(x);}
int findroot(int x){access(x);splay(x);while (ls) x=ls;return x;}
void split(int x,int y){makeroot(x);access(y);splay(y);}
void link(int x,int y){makeroot(x);access(y);splay(y);fa[x]=y;}
void cut(int x,int y){split(x,y);fa[x]=ch[y][0]=0;pushup(y);}
#undef ls
#undef rs
#undef I
} db fac[B+5];
void init(){fac[0]=1;rep(i,1,B) fac[i]=fac[i-1]*i;} void calc(int x,int f,db a,db b)
{
#define A LCT::a[x]
if (f==1)
{
db Sin=sin(b),Cos=cos(b),t=1;
rep(n,0,B)
{
db ret=t;
if (n&1) ret*=Cos; else ret*=Sin;
if (n%4>=2) ret=-ret;
A[n]=ret;
t*=a;
}
}
if (f==2)
{
db t=exp(b);
rep(i,0,B) A[i]=t,t*=a;
}
if (f==3)
{
A[0]=b;A[1]=a;
rep(i,2,B) A[i]=0;
}
LCT::pushup(x);
#undef A
} int n,m; int main()
{
file();
init();
string type;
int f,x,y;db a,b;
read(n,m);cin>>type;
rep(i,1,n) read(f,a,b),calc(i,f,a,b);
while (m--)
{
cin>>type;read(x,y);
if (type[0]=='a') LCT::link(x+1,y+1);
else if (type[0]=='d') LCT::cut(x+1,y+1);
else if (type[0]=='m') ++x,f=y,read(a,b),LCT::makeroot(x),calc(x,f,a,b);
else
{
++x,++y;read(a);
LCT::makeroot(x);if (LCT::findroot(y)!=x) { puts("unreachable"); continue; }
LCT::split(x,y);
db ans=LCT::sum[y][0],t=a;
rep(i,1,B) ans+=LCT::sum[y][i]*t/fac[i],t*=a;
printf("%.10Lf\n",ans);
}
}
}

洛谷P4546 [THUWC2017]在美妙的数学王国中畅游 [LCT,泰勒展开]的更多相关文章

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

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

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

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

  3. 【BZOJ5020】[LOJ2289]【THUWC2017】在美妙的数学王国中畅游 - LCT+泰勒展开

    咕咕咕?咕咕咕! 题意: Description 数字和数学规律主宰着这个世界. 机器的运转, 生命的消长, 宇宙的进程, 这些神秘而又美妙的过程无不可以用数学的语言展现出来. 这印证了一句古老的名言 ...

  4. BZOJ5020: [THUWC 2017]在美妙的数学王国中畅游(LCT,泰勒展开,二项式定理)

    Description 数字和数学规律主宰着这个世界.   机器的运转,   生命的消长,   宇宙的进程,   这些神秘而又美妙的过程无不可以用数学的语言展现出来.   这印证了一句古老的名言:   ...

  5. 洛谷 P4546 & bzoj 5020 在美妙的数学王国中畅游 —— LCT+泰勒展开

    题目:https://www.luogu.org/problemnew/show/P4546 先写了个55分的部分分,直接用LCT维护即可,在洛谷上拿了60分: 注意各处 pushup,而且 spla ...

  6. bzoj 5020(洛谷4546) [THUWC 2017]在美妙的数学王国中畅游——LCT+泰勒展开

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=5020 https://www.luogu.org/problemnew/show/P4546 ...

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

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

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

    如果只有第3个操作,那么这就是个sd题,随便lct搞搞就过去了 然后就是一个神仙东西 taylor公式 我不会,看gsy博客https://www.cnblogs.com/zhoushuyu/p/81 ...

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

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

随机推荐

  1. PHP之字符串匹配

    strstr(string,search): strstr() 函数搜索一个字符串在另一个字符串中的第一次出现. 该函数返回字符串的其余部分(从匹配点).如果未找到所搜索的字符串,则返回 false. ...

  2. 用Nodejs连接MySQL

    转载,原地址:http://blog.fens.me/nodejs-mysql-intro/ 前言 MySQL是一款常用的开源数据库产品,通常也是免费数据库的首选.查了一下NPM列表,发现Nodejs ...

  3. 前端向服务器请求数据并渲染的方式(ajax/jQuery/axios/vue)

    原理: jQuery的ajax请求:complete函数一般无论服务器有无数据返回都会显示(成功或者失败都显示数据): return result

  4. python 的基础 学习 第八天数据类型的补充 ,集合和深浅copy

    1,数据类型的补充: 元组()tuple,如果只有元素,并且没有逗号,此元素是什么数据类型,该表达式就是什么数据类型. tu = ('rwr') print(tu,type(tu)) tu = ('r ...

  5. Python 爬虫六 性能相关

    前面已经讲过了爬虫的两大基础模块: requests模块:用来伪造请求爬取数据 bs4模块:用来整理,提取数据 当我们真正的开始有需求的时候通常都是批量爬取url这样的.那如何批量爬取呢? 按照正常的 ...

  6. NoClassDefFound Error: com/fasterxml/jackson/annotation/JsonAutoDetect

    少了 jackson-annotation https://blog.csdn.net/qq_36497454/article/details/80461676

  7. H - Rescue the Princess ZOJ - 4097 (tarjan缩点+倍增lca)

    题目链接: H - Rescue the Princess  ZOJ - 4097 学习链接: zoj4097 Rescue the Princess无向图缩点有重边+lca - lhc..._博客园 ...

  8. Palindromic Numbers LightOJ - 1205

    题目大意: 求区间内的回文数个数 题目思路: 数位dp,先枚举前一半数字,然后填上相应的后一半数字. #include<cstdio> #include<cstring> #i ...

  9. graph slam BACK END 相关技术资料收集

    学习SLAM首推2个网站: 1. WIKI上的SLAM介绍与资源总结:http://en.wikipedia.org/wiki/Simultaneous_localization_and_mappin ...

  10. Python 面向对象【2】

    组合 [适合没干系的横向类,比如池塘,乌龟,鱼]  把类的实例化放到新类里面     属性名和方法名相同,属性会覆盖掉方法   绑定 方法需要实例才能被调用!! 这种限制即绑定 用self接受绑定   ...