VK Cup 2015 - Qualification Round 1, problem: (A) Reposts 【dfs】

题意

转发帖子问题,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;
}
学如逆水行舟,不进则退
发布了408 篇原创文章 · 获赞 955 · 访问量 12万+

猜你喜欢

转载自blog.csdn.net/weixin_42429718/article/details/104098561