int distant[maxn];//记录到1的距离,-1表示还没遍历到 vector<int> g[maxn]; void dfs(int st, int dis, int *total){ int i; for(i = 0; i < g[st].size(); ++i){ int child = g[st][i]; if(distant[child] == -1){ distant[child] = dis+1; *total += 2; dfs(child, dis+1, *total); } } } int main(){ /* io */ memset(distant, -1, sizeof(distant)); int total = 0; //总共的路径,表示从1开始转一圈回来的长度 distant[1] = 0; dfs(1,0,&total); int i, maxd = -1; for(i = 1; i <= n; ++i) if(maxd < distant[i]) maxd = distant[i];   printf("%d\n", total - maxd); } 我的伪代码大概就是这样,思路还是很简单的
点赞 3

相关推荐

Hyh_111:像这种hr就不用管了,基本没啥实力,换一个吧
点赞 评论 收藏
分享
牛客网
牛客网在线编程
牛客网题解
牛客企业服务