题目一:图的遍历
说给了一张包含个N个点N-1条边的无向连通图,节点从1到N编号,每条边长度均为1,设你从1号节点出发并打算遍历所有节点,那么总路程至少是多少?
输入:第一行包含一个整数N,接下来N-1行,每行包括两个整数x,y表示x与y之间有一条边
输出:总路程最小和
样例:
4
1 2
1 3
3 4
输出:4
思路:一共n-1条边,每个边走两次,一共2*(n-1) ,有边不走两次,也就是不回头,减去一次,当走的路径为最大深度deep时候,总路程最小为2*(n-1)-deep
#include <bits/stdc++.h>
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) {