Loading...
Submission
Id When Author Problem Language CPU Memory Verdict
13431 2024-02-29 22:44:05 mhmuhim Minimal Subtree C++ 17 301 ms 51420 kb Accepted
Test Cases
CPU Memory Verdict
1 18 ms 29328 kb Accepted
2 24 ms 29384 kb Accepted
3 266 ms 51420 kb Accepted
4 231 ms 43864 kb Accepted
5 296 ms 36408 kb Accepted
6 286 ms 36260 kb Accepted
7 301 ms 36384 kb Accepted
8 225 ms 43460 kb Accepted
9 24 ms 29352 kb Accepted
10 29 ms 29556 kb Accepted
11 145 ms 32688 kb Accepted
12 293 ms 36352 kb Accepted
13 293 ms 36456 kb Accepted
14 144 ms 32580 kb Accepted
15 297 ms 36380 kb Accepted
16 161 ms 32916 kb Accepted
Source Code
program.cpp
Download
  1. #include <bits/stdc++.h>
  2. using namespace std;
  3. const int N = 200005;
  4. struct tree{
  5. int arr[27];
  6. tree(){
  7. memset(arr,0,sizeof arr);
  8. }
  9. }ans[N];
  10. char c[N];
  11. std::vector<int>gp[N];
  12.  
  13. void dfs(int s,int p){
  14. ans[s].arr[0] = 1;
  15. ans[s].arr[c[s]-'a'+1] = 1;
  16. for(auto u:gp[s]){
  17. if(u != p){
  18. dfs(u,s);
  19. for(int i = 0; i < 27; i++){
  20. ans[s].arr[i] += ans[u].arr[i];
  21. }
  22. }
  23. }
  24. }
  25.  
  26. int main()
  27. {
  28. int n;
  29. cin>>n;
  30. for(int i = 1; i <= n; i++)cin>>c[i];
  31. for(int i = 1; i < n; i++){
  32. int a,b;
  33. cin>>a>>b;
  34. gp[a].push_back(b);
  35. gp[b].push_back(a);
  36. }
  37. string s;
  38. cin>>s;
  39.  
  40. dfs(1,0);
  41. int m[30] = {0};
  42. for(auto u:s)m[u-'a'+1]++;
  43.  
  44. int ans1 = N;
  45. for(int i = 1; i <= n;i++){
  46. bool ok = 1;
  47. for(int j = 1; j<27;j++){
  48. ok &= (ans[i].arr[j]>= m[j]);
  49. }
  50. if(ok){
  51. ans1 = min(ans1,ans[i].arr[0]);
  52. }
  53. }
  54.  
  55. if(ans1 == N)cout<<-1<<"\n";
  56. else cout<<ans1<<"\n";
  57.  
  58. return 0;
  59. }