#include <stdio.h>
#include <string.h>
struct node
{
int e;
int jz;
node *next[26];
char c;
}*head,*now;
node *q[100001];
node *jianshu(char *s)
{
int len = strlen(s);
int i,n;
node *p;
for(i = 0; i<len; i++)
{
n = s[i] - 'a';
if(now->next[n] == NULL)
{
p = new node;
memset(p,0,sizeof(*p));
p->c = s[i];
now->next[n] = p;
}
now = now->next[n];
}
now->e = 1;
return now;
}
int js(node *p)
{
int num = 0;
if(p->e)
num = p->jz;
for(int i = 0; i<26; i++)
{
if(p->next[i] != NULL)
{
num += js(p->next[i]);
}
}
return num;
}
int main()
{
int N;
scanf("%d",&N);
while(N--)
{
head = new node;
memset(head,0,sizeof(*head));
int n;
scanf("%d",&n);
for(int i = 0; i<n; i++)
{
char s[10];
scanf("%s",s);
now = head;
q[i] = jianshu(s);
}
for(int i = 0; i<n; i++)
{
int jiaz;
scanf("%d",&jiaz);
q[i]->jz = jiaz;
}
for(int i = 0; i<n; i++)
{
int jiaz;
jiaz = js(q[i]);
printf("%d",jiaz);
if(i<n-1)
printf(" ");
else
printf("\n");
}
}
return 0;
}
字典树——名字的价值
最新推荐文章于 2023-12-14 18:04:51 发布