紧急疏散C++11

紧急疏散

http://www.nowcoder.com/questionTerminal/976164f3464145c486cbc855f1a60aae

C++ 版本,这个题目的意思就是除了一号节点可以同时容纳多人之外,其他每个节点和路径上都只能某一时刻有一个人通过。那么我们就可以直接从1号节点的子节点开始计算到达安全出口所需要的步骤数。由于我们可以使用哈希表获得每个节点的子节点,所以选择使用bfs,最后取1号节点所有子节点做为根节点时候其所有子节点到达出口的最大值。

#include<iostream>
#include<vector>
#include<unordered_map>
#include<queue>
using namespace std;
int main(){
    int n;
    unordered_map<int,vector<int> > map;
    vector<int> rootChilds;
    cin>>n;
    for(int i=0;i<n-1;i++){
        int x,y;
        cin>>x>>y;
        map[x].push_back(y);
        map[y].push_back(x);
        if(x==1) rootChilds.push_back(y);
        if(y==1) rootChilds.push_back(x);
    }
    vector<int> visited(n+1,0);
    visited[1]=1;
    int sum=0;
    for(int i=0;i<rootChilds.size();i++){
        int node = rootChilds.at(i), sumTemp=0;
        visited[node]=1;
        queue<int> que;
        que.push(node);
        while(!que.empty()){
            sumTemp++;
            vector<int> t = map[que.front()];
            que.pop();
            for(int j=0;j<t.size();j++){
                if(visited[t[j]]==0){
                    que.push(t[j]);
                    visited[t[j]]=1;
                }
            }
        }
        sum = max(sum, sumTemp);
    } 
    cout<<sum;
    return 0;
}
全部评论

相关推荐

11-18 09:44
Java
小白也想要offer:简历别放洋屁,搞不还还放错了,当然你投外企除外,以上纯属个人观点
点赞 评论 收藏
分享
评论
1
1
分享
牛客网
牛客企业服务