题目链接
思路:建边,用dfs求最大深度。
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int maxn=1e3+1;
int n,cnt=0,deep=0,root;
vector<int>g[maxn];
map<string,int>p;
string s(string x)
{
for(int i=0;i<x.size();++i)
if(x[i]>='A'&&x[i]<='Z') x[i]+=32;
return x;
}
void dfs(int u,int fa,int dep)
{
if(dep>deep) deep=dep;
for(int to:g[u])
{
if(to==fa) continue;
dfs(to,u,dep+1);
}
}
int main()
{
string s1,s2,s3;
cin>>n;
for(int i=1;i<=n;++i)
{
cin>>s1>>s2>>s3;
s1=s(s1),s3=s(s3);
if(!p[s3]) p[s3]=++cnt;
if(!p[s1]) p[s1]=++cnt;
if(s3=="polycarp") root=p[s3];
if(s1=="polycarp") root=p[s1];
g[p[s1]].push_back(p[s3]);
g[p[s3]].push_back(p[s1]);
}
dfs(root,0,0);
cout<<deep+1<<endl;
}