题意
有一个笑话,刚开始只有一人知道,每一次由一个已经知道的人讲给一个不知道的人,问最长的传递链有多长
思路
用map将人名映射成数字,然后进行dfs
代码
#include <cstdio>
#include <iostream>
#include <string>
#include <map>
#include <vector>
using namespace std;
map<string,int> hash;
int mp[205][205];
int n,ans;
string change(string s)
{
for(int i=0;i<s.length();i++)
if(s[i]>='A'&&s[i]<='Z')
s[i]-='A'-'a';
return s;
}
void dfs(int x,int from,int step)
{
if(step>ans)
ans=step;
for(int i=1;i<=n+1;i++)
if(mp[x][i]==1&&i!=from)
dfs(i,x,step+1);
return;
}
int main()
{
string s1,s2;
cin>>n;
cin>>s1;
cin>>s2;
cin>>s2;
hash[change(s1)]=1;
hash[change(s2)]=2;
mp[1][2]=1;
mp[2][1]=1;
for(int i=1;i<n;i++)
{
cin>>s1;
cin>>s2;
cin>>s2;
hash[change(s1)]=i+2;
mp[hash[change(s2)]][i+2]=1;
mp[i+2][hash[change(s2)]]=1;
}
dfs(2,0,1);
cout<<ans<<endl;
return 0;
}