求救代码全 TLE

学术版

@[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


|