@[Aw顿顿](/user/212283) 炖炖用 `%lld` 输入 `int`(
by LeavingZ @ 2020-11-27 22:09:53
@[_Leaving](/user/215697) `#define int long long` 写了鸭/kk
by Aw顿顿 @ 2020-11-27 22:10:51
dbq喝了假酒
非常非常抱歉
by LeavingZ @ 2020-11-27 22:14:18
@[Aw顿顿](/user/212283) 数据范围?
~~以及我题目没看懂欸有样例解释吗~~
by Hexarhy @ 2020-11-27 22:15:33
@[Aw顿顿](/user/212283) `dfs2` 没有返回递归的值(,可能是这里有问题
by Ryo_Yamada @ 2020-11-27 22:17:20
@[Aw顿顿](/user/212283)
```
int dfs2(int st){
if(vis[st])return st;
return dfs2(fa[0][st]);
```
这样QWQ
by LeavingZ @ 2020-11-27 22:18:21
@[BreezeEnder](/user/242543) @[_Leaving](/user/215697)
谢谢(
by Aw顿顿 @ 2020-11-27 22:20:27
@[Hilarious_Reality](/user/80049)
![Dspmy8.png](https://s3.ax1x.com/2020/11/27/Dspmy8.png)
这个更清楚点
by Aw顿顿 @ 2020-11-27 22:22:11
但是依然存在问题/kk
那个 `max(ans,1ll)` 的也改了
by Aw顿顿 @ 2020-11-27 22:22:40
代码请以这个为准:
```cpp
#include<bits/stdc++.h>
#define mod 100000007
#define int long long
using namespace std;
int n,q,k,a[25],l;
int fa[2][500005],path[25];
bool vis[500005];
void dfs1(int st){
int next=st;vis[st]=1;
while(fa[0][next]){
next=fa[0][next];
vis[next]=1;
}
}int dfs2(int st){
if(vis[st])return st;
return dfs2(fa[0][st]);
}void findpath(int st,int node){
int ans=1,now=st;
while(1){
if(!now)break;
int cur=fa[1][now];
path[cur]=!path[cur];
now=fa[0][now];
}for(int i=1;i<=20;i++){
if(!path[i])continue;
ans=ans*a[i]%mod;
}cout<<max(ans,1ll)<<'\n';
}signed main(){
// freopen("playgame.in","r",stdin);
// freopen("playgame.out","w",stdout);
cin>>n>>q>>k;
for(int i=1;i<n;i++){
int x,y,z;
scanf("%lld%lld%lld",&x,&y,&z);
fa[0][x]=y;fa[1][x]=z;
}for(int i=1;i<=k;i++)
scanf("%lld",&a[i]);
for(int i=1;i<=q;i++){
int x,y;
scanf("%lld%lld",&x,&y);
dfs1(x);int node=dfs2(y);
findpath(x,node);
}return 0;
}
```
by Aw顿顿 @ 2020-11-27 22:31:47