题目 题意: 给定一个有向无环图,有+、-、、lnx、e的x、sinx六种操作。有若干个自变量。求到达终点的函数值以及每个变量对应的偏导数值。题目保证仅有一个终点。 思路: 用一个数组存下每个编号为i的结点的信息,操作类型和左右结点。求函数值好求的,可以topsort,也可以递归。但是求偏导数我就不会咧,递归求确实好求。拿一个map维护。因为要记忆化减少重复计算,否则T一个点。 cur: 当前求哪个结点的值 wh: 0表示不求导,1表示求导 p: 对哪个自变量求导 时间复杂度: O(能过),单个自变量最多2nlog(2n),但是多个自变量就不好说了,但是有很多包含函数值的部分不会重复计算。反正能过. 代码:
#include
using namespace std;
const int N = 5e4+10;
typedef long long ll;
typedef pair PII;
#define mem(a,x) memset(a,x,sizeof(a))
#define fir(i,a,b) for(int i=a;i>n;
for(int i=0;i>op;
if(op==0)
{
double x; cin>>x;
a[i].val = x;
}
else if(op>l>>r;
a[i].l = l,a[i].r = r;
a[l].flag = a[r].flag = 1;
}
else
{
int l; cin>>l;
a[i].l = l;
a[l].flag = 1;
}
a[i].op = op;
}
int root;
for(int i=0;i
关注
打赏