牛客25606题解:DFS计算树结构最优解
一、问题理解
牛客25606题要求我们计算树结构中的最优解,这个问题可以转化为寻找树的最长路径(直径)问题。通过DFS遍历树结构,我们可以高效地解决这类典型的图论问题。
二、算法核心思想
三、完整代码实现(带注释)
#include <iostream> #include <vector> using namespace std; vector<vector<int>> graph; vector<bool> visited; int max_depth = 0; void dfs(int node, int depth) { visited[node] = true; max_depth = max(max_depth, depth); for (int neighbor : graph[node]) { if (!visited[neighbor]) { dfs(neighbor, depth + 1); } } } int main() { int N; cin >> N; graph.resize(N + 1); visited.resize(N + 1, false); for (int i = 0; i < N - 1; ++i) { int X, Y; cin >> X >> Y; graph[X].push_back(Y); graph[Y].push_back(X); } dfs(1, 0); cout << 2 * (N - 1) - max_depth << endl; return 0; }
关键知识点详解
原创内容 转载请注明出处