紧急疏散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; }