CF522A 1200 *

题意

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;
}
posted @   Isaac233  阅读(12)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】
点击右上角即可分享
微信分享提示