#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 3e5 + 10;
ll n,m,c[N],v[N],mul_c[N],mul_v[N],ans;
vector<int >e[N];
void dfs(int x,int fa){
mul_c[x] = c[x] % m,mul_v[x] = v[x] % m;
for(auto to : e[x]){
if(to == fa)continue;
dfs(to,x);
mul_c[x] *= mul_c[to] % m,mul_v[x] *= mul_v[to] % m;
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie(0),cout.tie(0);
cin >> n >> m;
for(int i = 1;i < n;i++){
int u,v;
cin >> u >> v;
e[u].push_back(v);
e[v].push_back(u);
}
for(int i = 1;i <= n;i++)
cin >> c[i];
for(int i = 1;i <= n;i++)
cin >> v[i];
dfs(1,0);
for(int i = 1;i <= n;i++){
if(i == 1)ans += mul_c[i] % m;
else{
ll tmp = mul_v[1] / mul_v[i] % m;
ans += 1ll * mul_c[i] * tmp % m;
}
}
cout << ans;
return 0;
}
感觉自己做法没错,却莫名奇妙RE了,求大佬指教!