O(n)用树上DP或者拓扑跑一遍
拓扑:当度为1时,加入队列,每次f[i]被加时,度--
代码是树上DP的
#include<bits/stdc++.h>
#define N 1000010
#define abs(a) ((a)>0?(a):(-(a)))
#define mem(a,b …
求x在%p意义下的逆元
即x^(p-2)
#define md(a) (((a)%p+p)%p)
inline ll po(ll x){
ll y=mo-3,ans=x,t=x;
while(y>0){
if(y&1)ans=md(ans*t);
y=y>>1;
t=md(t*t);
}
return ans;
}