题目来源
题目描述
题目解析
- 单源最短路径问题,找到起始节点到其他节点的最短路径的最大值 * 2即可。
- 可以用BFS、DFS或者dijkstra算法
BFS
找到离起始节点最远的节点的距离,然后 *2
#include <utility>
#include <vector>
#include <map>
#include <set>
#include <iostream>
#include <queue>
using namespace std;
int main(){
int N, T;
std::cin >> N >> T;
// 节点之间一定是互联互通的,不要单向传播不到
int u, v;
std::map<int, std::set<int>> map; //记录边到边的关系
for (int i = 0; i < T; ++i) {
std::cin >> u >> v;
map[u].insert(v);
map[v].insert(u);
}
int start;
std::cin >> start;
std::queue<int> queue;
std::set<int> visited;
int cnt = 0; // 记录几层能够遍历完成
queue.push(start);
visited.count(start);
while (visited.size() < N){ // 当全部感染完成了
int size = queue.size();
for (int i = 0; i < size; ++i) {
auto cur = queue.front(); queue.pop();
for(auto next : map[cur]){
if(visited.count(next) == 0){ // 之前没有走过
visited.insert(next);
queue.push(next);
}
}
}
cnt++;
}
std::cout << cnt * 2 <<"\n";
return 0;
}
DP