链接:
https://codeforces.com/problemset/problem/522/A
题意:
n条信息
name1 XXXXXX name2 表示人物2转发人物1的消息
求最长转发链条
解:
因为大小写不影响人物“独立”,所以字符串全换成大写
然后map给每个string一个编号,n很小直接搜索map
然后把编号放入对应vector,然后dfs就好了
PS:实测book可以不加AC,应该没有A转发B,B再转发A这样子的
#include<iostream>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;
const int N=2E2+5;
typedef long long int ll;
void DX(string &s)
{
int lg=s.length();
for(int i=0;i<lg;i++)
{
if(s[i]<='z'&&s[i]>='a')
{
s[i]=s[i]+'A'-'a';
}
}
}
map<string,int>ss;
vector<int>link[N];
bool book[N];
int ans=0;
void dfs(int bh,int sd)
{
int lg=link[bh].size();
book[bh]=1;
for(auto i:link[bh])
{
if(book[i]!=1)
{
dfs(i,sd+1);
}
}
if(lg==0)
{
ans=max(ans,sd);
return;
}
return;
}
int main()
{
int n;
cin>>n;
int bh=1;
for(int i=1;i<=n;i++)
{
string a,b,c;
cin>>a>>b>>c;
DX(a);DX(c);
if(i==1&&ss.find(c)==ss.end()) ss[c]=bh++;
if(ss.find(a)==ss.end()) ss[a]=bh++;
link[ss[c]].push_back(ss[a]);
}
dfs(1,1);
cout<<ans<<endl;
}
限制:
time limit per test
1 second
memory limit per test
256 megabytes
input
standard input
output
standard output