题意
Polycarp在他的微博上发布了一张有趣的照片。他的很多朋友就开始在微博上转发这张图片,这个事情可以被一个字符串描述:name1 reposted name2,意思是说name1这个人转发了name2这个人。题目保证name1肯定是还没有转发过照片的,name2这个人已经有这个照片了。数据范围:每个人的名字的长度大于等于2,小于等于26,N<=200。
输入#1:
5
tourist reposted Polycarp
Petr reposted Tourist
WJMZBMR reposted Petr
sdya reposted wjmzbmr
vepifanov reposted sdya
输出#1:
6
解析
不用dfs,因为一个人不会多次转发,所以这个人往下转,只有一个分支。可以转换思路从后往前,类似一个树。f[i]代表从根节点,也就是从polycarp过来的长度。初始化令f["polycarp"]=1,每次边更新f边更新答案。这题可以用map建立映射。
代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
int n,res;
unordered_map<string,int> f;
void tolow(string &s){
for(auto &c : s)
if(c >= 'A' && c <= 'Z')
c += 32;
}
int main(){
cin >> n;
f["polycarp"] = 1;
for(int i=0;i<n;i++){
string a,b,c;
cin >> a >> b >> c;
tolow(a);
tolow(c);
if(f[c] + 1 > res)
res = f[c] + 1;
f[a] = f[c] + 1;
}
cout << res;
return 0;
}
标签:tolow,reposted,res,name1,1200,CF522A,name2,转发
From: https://www.cnblogs.com/dtdbm/p/17127167.html