题意
转发帖子问题,A reposted B
A代表转发人,B代表发帖人,求最大转发链长度
思路
将所有人统一用户名为小写,然后用1-n的数字建树,然后我们用dfs从根节点开始搜,搜到最长长度即可
code
#include<bits/stdc++.h>
#define endl '\n'
using namespace std;
const int maxn=210;
int n;
map<string,int> mp;
int dp[maxn];
int cnt=0,cc=0;
vector<int> G[maxn];
string s1,s2;
void dfs(int u,int root){
dp[u]=1;
for(int i=0;i<G[u].size();i++){
int v=G[u][i];
if(v==root) continue;
dfs(v,u);
dp[u]=max(dp[u],dp[v]+1);
cnt=max(cnt,dp[u]);
}
}
int main(){
cin>>n;
for(int i=0;i<n;i++){
cin>>s1>>s2>>s2;
for(int j=0;j<s1.length();j++)
s1[j]=tolower(s1[j]);
for(int j=0;j<s2.length();j++)
s2[j]=tolower(s2[j]);
if(!mp[s1]) mp[s1]=++cc;
if(!mp[s2]) mp[s2]=++cc;
G[mp[s1]].push_back(mp[s2]);
G[mp[s2]].push_back(mp[s1]);
}
dfs(mp["polycarp"],-1);
cout<<cnt<<endl;
return 0;
}
学如逆水行舟,不进则退