Не могу понять, почему код для DFS показывает ошибку сегментации Может кто-нибудь помочь мне с кодом? Код показывает правильный вывод для пользовательского ввода, но показывает ошибку сегментации при запуске и для всех тестовых случаев. Каковы различные причины ошибок сегментации. Я даже не использовал указатели.
#include<bits/stdc++.h>
using namespace std;
typedef long long int ll;
#define mod 1000000007
const ll N = 100001;
std::vector<ll> adj[N];
ll a[N];
ll arr[N];
ll visited[N];
void dfs(ll s, ll e, ll v,ll visited[])
{
if(s==v)
{
visited[s]=-1;
}
for (auto u : adj[s])
{
if (u == e) continue;
dfs(u, s, v, visited);
if(visited[u]==-1)
{
visited[s]=-1;
}
}
}
void prime(ll n)
{
for(ll i=2;i*i<=n;i++)
{
while(n%i==0)
{
arr[i]=arr[i]%mod +1;
n/=i;
}
}
if(n>1)
{
arr[n]= arr[n]% mod +1;
}
}
int main()
{
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
ll t;
cin>>t;
while(t--)
{
ll n;
cin>>n;
for(ll i=1;i<=n-1;i++)
{
ll x,y;
cin >> x >> y;
adj[x].push_back(y);
adj[y].push_back(x);
}
for(ll i=1;i<=n;i++)
{
cin>>a[i];
}
ll q;
cin>>q;
while(q--)
{
ll u,v;
cin>>u>>v;
for(ll i = 1; i <= n; i++)
{
visited[i] =0 ;
}
dfs(u,0,v,visited);
for(ll i = 1; i <= n; i++)
{
arr[i] =1 ;
}
for(ll i=1;i<=n;i++)
{
if(visited[i]==-1)
{
prime(a[i]);
}
}
ll prod=1;
for(ll i=1;i<=n;i++)
{
if(arr[i]!=1)
{
prod*=(arr[i] % mod);
}
}
cout<<prod % mod<<"\n";
}
}
return 0;
}