Advertisement
Guest User

Untitled

a guest
Feb 1st, 2023
55
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.18 KB | None | 0 0
  1. //Problem Link :
  2. #include <bits/stdc++.h>
  3. #include<ext/pb_ds/assoc_container.hpp>
  4. #include<ext/pb_ds/tree_policy.hpp>
  5. using namespace std;
  6. using namespace __gnu_pbds;
  7. #define int long long int
  8. typedef tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> pbds;
  9. // Instead of less<int>, we can use greater<int>, less_equal<int> for descending, and having multiple occurence respectivly
  10. template<class T> using oset =tree<T, null_type, less<T>, rb_tree_tag,tree_order_statistics_node_update> ;
  11. #define pb push_back
  12. #define mp make_pair
  13. #define fl(i, a, b) for (int i = a; i < b; i++)
  14. #define vi vector<int>
  15. #define e1(a) int a; cin>>a;
  16. #define e2(a,b) int a,b; cin>>a>>b;
  17. #define e3(a,b,c) int a,b,c; cin>>a>>b>>c;
  18. #define __builtin_LIVU() ios_base::sync_with_stdio(false);cin.tie(NULL)
  19. #define av(arr,n) vector<int> arr(n); fl(i,0,n) cin>>arr[i];
  20. #define aa(arr,n) int arr[n]; fl(i,0,n) cin>>arr[i];
  21. #define es(s) string(s); cin >> (s);
  22. #define rz resize
  23. #define vvi vector<vector<int>>
  24. #define sz(s) s.size()
  25. #define mod 2
  26. #define ff first
  27. #define ss second
  28. #define inf 10e15
  29. #define all(x) (x).begin(), (x).end()
  30. #define pii pair<int, int>
  31. #define mii map<int,int>
  32. #define vl(n) cout << n << "\n"
  33. #define vs(n) cout << n << " "
  34. #define el cout<<"\n"
  35. #define rmin(a,b) (a=min((a),(b)))
  36. #define rmax(a,b) (a=max((a),(b)))
  37. #define UB upper_bound
  38. #define LB lower_bound
  39. #define vn(n) cout << n
  40. #define dsc greater<int>()
  41. #define ps(x,y) fixed<<setprecision(y)<<x
  42. #define R return
  43. #define B break
  44. #define C continue
  45. #define YC cout<<"YES"<<"\n"
  46. #define YS cout<<"Yes"<<"\n"
  47. #define NC cout<<"NO"<<"\n"
  48. #define fv(a) for(auto v:(a))
  49. #define NS cout<<"No"<<"\n"
  50. #define lcm(a,b) (a/__gcd(a,b))*b
  51. #define pa(a) for(auto e:a)cout<<e<<" "
  52. const int N = 1e5 + 5;
  53. int dx[4] = { -1, 1, 0, 0};
  54. int dy[4] = {0, 0, -1, 1};
  55. int kx[8] = { -1, 1, 0, 0, -1, -1, 1, 1};
  56. int ky[8] = {0, 0, -1, 1, -1, 1, -1, 1};
  57.  
  58. #ifndef ONLINE_JUDGE
  59. #define pra(a,n)cerr<<#a<<":";for(int i=0;i<n;i++)cerr<<a[i]<<" ";cerr<<endl;
  60. #define prm(mat,row,col)cerr<<#mat<<":\n";for(int i=0;i<row;i++){for(int j=0;j<col;j++)cerr<<mat[i][j]<<" ";cerr<<endl;}
  61. #define pr(...)dbs(#__VA_ARGS__,__VA_ARGS__)
  62. template<class S, class T>ostream &operator<<(ostream &os, const pair<S, T> &p) {return os << "(" << p.first << "," << p.second << ")";}
  63. template<class T>ostream &operator<<(ostream &os, const vector<T> &p) {os << "["; for (auto&it : p)os << it << " "; return os << "]";}
  64. template<class T>ostream &operator<<(ostream &os, const set<T>&p) {os << "["; for (auto&it : p)os << it << " "; return os << "]";}
  65. template<class T>ostream &operator<<(ostream &os, const multiset<T>&p) {os << "["; for (auto&it : p)os << it << " "; return os << "]";}
  66. template<class S, class T>ostream &operator<<(ostream &os, const map<S, T>&p) {os << "["; for (auto&it : p)os << it << " "; return os << "]";}
  67. template<class T>void dbs(string str, T t) {cerr << str << ":" << t << "\n";}
  68. template<class T, class...S>void dbs(string str, T t, S... s) {int idx = str.find(','); cerr << str.substr(0, idx) << ":" << t << ","; dbs(str.substr(idx + 1), s...);}
  69. #else
  70. #define pr(...){}
  71. #define pra(a,n){}
  72. #define prm(mat,row,col){}
  73. #endif
  74. vector<char>a;
  75. vi par;
  76. vi gr[5005];
  77. void dfs1(int src,int pare){
  78. par[src]=pare;
  79. for(auto v:gr[src]){
  80. if(v!=pare){
  81. dfs1(v,src);
  82. }
  83. }
  84. }
  85.  
  86. // Trie Template Snippet Starts
  87. int ans=0;
  88. class Vertex{
  89. public:
  90. int prefixEnd;
  91. vector<int>next;
  92. Vertex(int k){
  93. prefixEnd=0;
  94. next.resize(k,-1);
  95. }
  96. };
  97. class Trie{
  98. public:
  99. int K;
  100. vector<Vertex>nodes;
  101. Trie(int k){
  102. K=k;
  103. nodes.push_back(Vertex(K));
  104. }
  105. void add(string s){
  106. //
  107. int cur=0;
  108. for(auto c:s){
  109. if(nodes[cur].next[c-'a']==-1){
  110. nodes[cur].next[c-'a']=nodes.size();
  111. nodes.push_back(Vertex(K));
  112. }
  113. cur=nodes[cur].next[c-'a'];
  114. }
  115. }
  116. int find(string s){
  117. int cur=0;
  118. for(auto c:s){
  119. if(nodes[cur].next[c-'a']==-1){
  120. return 0;
  121. }
  122. cur=nodes[cur].next[c-'a'];
  123. }
  124. }
  125. void insert(int currL,char c){
  126. if(nodes[currL].next[c-'a']==-1){
  127. nodes[currL].next[c-'a']=nodes.size();
  128. nodes.push_back(Vertex(K));
  129. }
  130. currL=nodes[currL].next[c-'a'];
  131. nodes[currL].prefixEnd++;
  132. }
  133.  
  134. };
  135. // Trie Template Ends
  136. void dfs(int src,int currL,Trie &t){
  137. if(t.nodes[currL].next[a[src]-'a']==-1){
  138. return;
  139. }
  140. currL=t.nodes[currL].next[a[src]-'a'];
  141. ans+=(t.nodes[currL].prefixEnd);
  142. for(auto v:gr[src]){
  143. if(v!=par[src]){
  144. dfs(v,currL,t);
  145. }
  146. }
  147. }
  148. void insert(int src,int currL,Trie &t){
  149. t.insert(currL,a[src]);
  150. currL=t.nodes[currL].next[a[src]-'a'];
  151. for(auto v:gr[src]){
  152. if(v!=par[src]){
  153. insert(v,currL,t);
  154. }
  155. }
  156.  
  157. }
  158. void solve()
  159. {
  160. /*
  161. Har ake node ke liye wapas se dfs krenge and will store every string.
  162. */
  163. e1(n);
  164. a.resize(0);
  165. a.resize(n);
  166. par.resize(0);
  167. par.resize(n,0);
  168. fl(i,0,n)cin>>a[i];
  169. // pr(a);
  170. for(int i=0;i<n;i++){
  171. gr[i].resize(0);
  172. }
  173. fl(i,0,n-1){
  174. e2(x,y);x--;y--;
  175. gr[x].pb(y);
  176. gr[y].pb(x);
  177. }
  178. dfs1(0,-1);
  179. int res[n];
  180. fl(i,0,n){
  181. res[i]=1;
  182. }
  183. for(int i=0;i<n;i++){
  184. ans=0;
  185. Trie t(26);
  186. t.insert(0,a[i]);
  187. for(auto v:gr[i]){
  188. if(v!=par[i]){
  189. int currL=t.nodes[0].next[a[i]-'a'];
  190. dfs(v,currL,t);
  191. insert(v,currL,t);
  192. }
  193.  
  194. }
  195. res[i]=ans+1;
  196. }
  197. e1(q);
  198. for(int i=0;i<q;i++){
  199. e1(x);
  200. x--;
  201. cout<<res[x]<<"\n";
  202. }
  203. }
  204. int32_t main()
  205. {
  206. __builtin_LIVU();
  207. int t = 1;
  208. cin >> t;
  209. fl(i, 1, t + 1) {
  210. solve();
  211. }
  212. return 0;
  213. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement