dfs

https://pintia.cn/problem-sets/1326724450987175936/problems/1326724615676514353

#include<iostream>
#include<string>
#include<math.h>
#include<map>
#include<algorithm>
#include<stdio.h>
#include<cstring>
#include<vector>
typedef long long ll;
using namespace std;
int bg[100005];//找begin点 
int vis[100005];
vector<int> data[100005];
int mx=1,deep=0,n,k,ans=1; 
void dfs(int node,int step){
    if(vis[node]){//如果该节点没有子节点就更新mx然后return 
        if(step>mx){
            mx=step;
            ans=node;
        }
        return ;
    }
    else{
        vis[node]=1;
        for(int i=0;i<data[node].size();++i)//依次对他从左往右的所有子节点进行dfs 
        dfs(data[node][i],step+1);
    }
}
int main() {
    scanf("%d",&n);
    for(int i=1;i<=n;++i){
        cin>>k;
        if(k==0) vis[i]=1;//没有节点就置为0 表示为dfs递归的结束点 
        else{
            int t;
            while(k--){
                scanf("%d",&t);
                data[i].push_back(t);
                bg[t]++;
            }
        }
    }
 int be;
 for(int i=1;i<=n;++i){//找到那个唯一的没有父节点的节点  即是root 
     if(!bg[i]){
         be=i;
         break;
     }
 }
 dfs(be,0);
 cout<<ans<<endl;
 return 0;
}
全部评论

相关推荐

03-31 14:46
已编辑
门头沟学院 Web前端
励志成为双港第一ja...:这其实很正常,离的太远了,他认为你不会来,就为了混个面试,而且成本很高,实习生都优先选本地高校。吃了地域的亏,所有很多时候地域可能比院校层次更重要。
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务