记一次备战美团笔试1

题目:给定一张包含N个点、N-1条边的无向连通图,节点从1到N编号,每条边的长度均为1。假设你从1号节点出发并打算遍历所有节点,那么总路程至少是多少?
第一行包含一个整数N,1≤N≤10^5。

输入描述:
接下来N-1行,每行包含两个整数X和Y,表示X号节点和Y号节点之间有一条边,1≤X,Y≤N。

输出描述:
输出总路程的最小值。

输入例子1:
4
1 2
1 3
3 4

输出例子1:
4


#include 
using namespace std;
const int N = 1e5+10;
vector<int> vec[N];
int ans;
void dfs(int x, int old, int w) {
    for(int i=0;i<vec[x].size();i++){
        if(vec[x][i]==old){
            continue;
        }
        dfs(vec[x][i],x,w+1);
    }
    ans = max(ans, w);
}
int main() {
    int n;
    scanf("%d", &n);
    for(int i = 1; i < n; ++ i) {
        int x, y;
        scanf("%d%d", &x, &y);
        vec[x].push_back(y);
        vec[y].push_back(x);
    }
    ans = 0;
    dfs(1, -1, 0);
    printf("%d\n", (n-1)*2-ans);
    return 0;
}

你可能感兴趣的:(记一次备战美团笔试1)