Question i was trying to solve-
" You are given a rooted tree that contains N nodes. Each node contains a lowercase alphabet. You are required to answer Q queries of type u,c, where u is an integer and c is a lowercase alphabet. The count of nodes in the subtree of the node u containing c is considered as the answer of all the queries. "
#include<bits/stdc++.h>
using namespace std;
void count(vector<vector<int>> *v,int par,string s,int arr[][26])
{
if(v[par].size()==0)
{
arr[par][s[par-1]-'a']++;
return;
}
arr[par][s[par-1]-'a']++;
for(int i=0;i<v[par].size();i++)
{
count(&v,v[par][i],s,&arr);
for(int j=0;j<26;j++)
{
arr[par][j]=arr[v[par][i]][j]+arr[par][j];
}
}
}
int main()
{
int n,q,par,child,arr[100010][26]={};
char alphabet;
cin>>n>>q;
string s;
cin>>s;
vector<vector<int>> v={};
while(n--)
{
cin>>par>>child;
v[par].push_back(child);
}
count(&v,1,s,&arr);
while(q--)
{
cin>>par>>alphabet;
cout<<arr[par][alphabet-'a']<<"\n";
}
}
and now the errors
In function ‘void count(std::vector<std::vector<int> >*, int, std::__cxx11::string, int (*)[26])’:
13:15: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
15:28: error: no matching function for call to ‘count(std::vector<std::vector<int> >**, __gnu_cxx::__alloc_traits<std::allocator<std::vector<int> > >::value_type&, std::__cxx11::string&, int (**)[26])’
4:6: note: candidate: void count(std::vector<std::vector<int> >*, int, std::__cxx11::string, int (*)[26])
4:6: note: no known conversion for argument 1 from ‘std::vector<std::vector<int> >**’ to ‘std::vector<std::vector<int> >*’
62:0,
64,
1:
3959:5: note: candidate: template<class _IIter, class _Tp> typename std::iterator_traits<_Iterator>::difference_type std::count(_IIter, _IIter, const _Tp&)
3959:5: note: template argument deduction/substitution failed:
15:28: note: deduced conflicting types for parameter ‘_IIter’ (‘std::vector<std::vector<int> >**’ and ‘std::vector<int>’)
18:19: error: no match for ‘operator[]’ (operand types are ‘int (*)[26]’ and ‘__gnu_cxx::__alloc_traits<std::allocator<std::vector<int> > >::value_type {aka std::vector<int>}’)
In function ‘int main()’:
35:19: error: no matching function for call to ‘count(std::vector<std::vector<int> >*, int, std::__cxx11::string&, int (*)[100010][26])’
4:6: note: candidate: void count(std::vector<std::vector<int> >*, int, std::__cxx11::string, int (*)[26])
4:6: note: no known conversion for argument 4 from ‘int (*)[100010][26]’ to ‘int (*)[26]’
62:0,
64,
1:
3959:5: note: candidate: template<class _IIter, class _Tp> typename std::iterator_traits<_Iterator>::difference_type std::count(_IIter, _IIter, const _Tp&)
3959:5: note: template argument deduction/substitution failed:
35:19: note: deduced conflicting types for parameter ‘_IIter’ (‘std::vector<std::vector<int> >*’ and ‘int’)
Aucun commentaire:
Enregistrer un commentaire