Не могу понять, почему код для DFS показывает ошибку сегментации - PullRequest
0 голосов
/ 09 апреля 2020

Не могу понять, почему код для 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;
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...