In this HackerEarth Nodes in a subtree problem solution, 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. 


HackerEarth Nodes in a subtree problem solution


HackerEarth Nodes in a subtree problem solution.

#include<bits/stdc++.h>
using namespace std;
int cnt[100005][26], n;
vector<int> adj[100005];
string s;
void dfs(int u, int parent)
{
int i;
for(i = 0; i < 26; i ++)
cnt[u][i] = 0;
cnt[u][s[u - 1] - 'a'] ++;
for(auto v: adj[u])
{
if(v == parent)
continue;
dfs(v, u);
for(i = 0; i < 26; i ++)
cnt[u][i] += cnt[v][i];
}
}
int main()
{
int q, i;
cin >> n >> q;
cin >> s;
for(i = 0; i < n - 1; i ++)
{
int u, v;
cin >> u >> v;
adj[u].push_back(v);
adj[v].push_back(u);
}
dfs(1, 0);
while(q --)
{
int u;
char c;
cin >> u >> c;
cout << cnt[u][c - 'a'] << endl;
}
return 0;
}