Submission
| Id | When | Author | Problem | Language | CPU | Memory | Verdict |
|---|---|---|---|---|---|---|---|
| 13431 | 2024-02-29 22:44:05 | mhmuhim | Minimal Subtree |
|
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
#include <bits/stdc++.h> using namespace std; const int N = 200005; struct tree{ int arr[27]; tree(){ memset(arr,0,sizeof arr); } }ans[N]; char c[N]; std::vector<int>gp[N]; void dfs(int s,int p){ ans[s].arr[0] = 1; ans[s].arr[c[s]-'a'+1] = 1; for(auto u:gp[s]){ if(u != p){ dfs(u,s); for(int i = 0; i < 27; i++){ ans[s].arr[i] += ans[u].arr[i]; } } } } int main() { int n; cin>>n; for(int i = 1; i <= n; i++)cin>>c[i]; for(int i = 1; i < n; i++){ int a,b; cin>>a>>b; gp[a].push_back(b); gp[b].push_back(a); } string s; cin>>s; dfs(1,0); int m[30] = {0}; for(auto u:s)m[u-'a'+1]++; int ans1 = N; for(int i = 1; i <= n;i++){ bool ok = 1; for(int j = 1; j<27;j++){ ok &= (ans[i].arr[j]>= m[j]); } if(ok){ ans1 = min(ans1,ans[i].arr[0]); } } if(ans1 == N)cout<<-1<<"\n"; else cout<<ans1<<"\n"; return 0; }