题意:高级魔法师可以教低级魔法师 魔法扫把技能,同时教会了的低级魔法师又可以教比他更低级是,是传递的关系
同时如果教会了的话,他们可以同时坐一个扫把 问最少需要多少个扫把
思路:就是判断相同的数字最多的是几个 他们分别乘坐一个扫把,这样其他的也能合理分配进这几个扫把
坑:这里刚开始数组开得过大总超时,超时到怀疑人生,后面开小直接过了。。。
#include<bits/stdc++.h>
using namespace std;
const int maxn=+;
struct Trie{
int ch[maxn][];
int size;
int num[maxn];
void init(){
memset(ch,,sizeof(ch));
memset(num,,sizeof(num));
size=;
}
int insert(char*s){
int i=,rc=;
while(s[i]=='')i++;
for( ;s[i]!='\0';i++){
int id=s[i]-'';
if(ch[rc][id]==){
ch[rc][id]=size++;
}
rc=ch[rc][id];
}
num[rc]++;
return num[rc];
} }trie;
char temp[];
int main(){
int n;
while(scanf("%d",&n)==){
int ans=;
// getchar();
trie.init();
while(n--){
scanf("%s",temp);
ans=max(trie.insert(temp),ans);
}
printf("%d\n",max(,ans));
// cout<<max(1,ans)<<endl;
}
return ;
}