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;
}
京公网安备 11010502036488号