题目链接:点击打开链接
题目大意:给你一棵树,求出这颗树上最长的边。
思路:用map把字符串转换成数字,然后建树,从根节点深搜,一层一层搜下去。
建树的方法:利用vector
ACcode:
/*
2017年10月13日19点40分
AC
*/
#include <iostream>
#include <map>
#include <set>
#include <string>
#include<string.h>
#include <cstring>
#include <cstdio>
#include <algorithm>
#include <cmath>
#include <queue>
#include <vector>
using namespace std;
typedef long long ll;
const int maxn=220;
int dp[maxn];
int ans=0;
vector<int> G[maxn];
map<string,int> mp;
string t="polycarp";
void trans(string &s){
int len=s.length();
for(int i=0;i<len;i++){
s[i]=tolower(s[i]);
}
}
void dfs(int u,int root){
dp[u]=1;
int len=G[u].size();
for(int i=0;i<len;i++){
int v=G[u][i];
if(v==root) continue;
dfs(v,u);
dp[u]=max(dp[u],dp[v]+1);
ans=max(dp[u],ans);
}
}
int main(){
int n;
scanf("%d",&n);
string a,b,c;
int num=0;
memset(dp,0,sizeof(dp));
mp.clear();
for(int i=0;i<maxn;i++){
G[i].clear();
}
for(int i=0;i<n;i++){
cin>>a>>b>>c;
trans(a);
trans(c);
if(!mp[a]) mp[a]=++num;
if(!mp[c]) mp[c]=++num;
G[mp[a]].push_back(mp[c]);
G[mp[c]].push_back(mp[a]);
}
dfs(mp[t],-1);
printf("%d\n",ans);
return 0;
}