关注
#include <bits/stdc++.h>
#include <stdio.h>
#define N 100005
using namespace std;
struct edge
{
int from;
int to;
edge(int i=0,int j=0)
{
from = i;to = j;
}
};
vector<edge>mp;
int visit[N];
int num[N];
int depth = 1;
int maxdepth = 1;
int cmp(edge l,edge r)
{
return l.from < r.from;
}
void dfs(int from)
{
edge tmp(from,0);
depth++;
maxdepth = max(maxdepth,depth);
auto pos = lower_bound(mp.begin(),mp.end(),tmp,cmp);
for(auto it=pos;it!=mp.end();it++)
{
if(it->from == from && !visit[it->to])
{
//printf("%d to %d\n",it->from,it->to);
visit[it->to] = 1;
num[depth] ++;
dfs(it->to);
}
if(it->from != from)
break;
}
depth--;
}
int main()
{
int n;
int ans = 0;
cin>>n;
for(int i=0;i<n-1;i++)
{
int a,b;
cin>>a>>b;
edge tmp(a,b);
mp.push_back(tmp);
}
sort(mp.begin(),mp.end(),cmp);
visit[1] = 1;
dfs(1);
for(int i=2;num[i];i++)
{
ans += (num[i] - 1) * 2 + 1;
//printf("num[%d] = %d\n",i,num[i]);
}
cout<<ans<<endl;
return 0;
}
第一题,dfs记录树的深度的数量存在num数组
ans += (num[i] - 1) * 2 + 1;
查看原帖
点赞 5
相关推荐
点赞 评论 收藏
分享
牛客热帖
正在热议
# 25届秋招总结 #
382846次浏览 3807人参与
# ai智能作图 #
12766次浏览 197人参与
# 北方华创开奖 #
65036次浏览 524人参与
# 地方国企笔面经互助 #
6189次浏览 14人参与
# 我的实习求职记录 #
6109803次浏览 83859人参与
# 发工资后,你做的第一件事是什么 #
5286次浏览 22人参与
# 阿里云管培生offer #
53196次浏览 1543人参与
# 硬件兄弟们 甩出你的华为奖状 #
76414次浏览 617人参与
# 如果再来一次,你还会选择这个工作吗? #
104522次浏览 1052人参与
# 哪些公司校招卡第一学历 #
31637次浏览 89人参与
# 如果有时光机,你最想去到哪个年纪? #
27214次浏览 564人参与
# 华为工作体验 #
109616次浏览 853人参与
# 如果你有一天可以担任公司的CEO,你会做哪三件事? #
9182次浏览 188人参与
# 还记得你第一次面试吗? #
30310次浏览 428人参与
# 许愿池 #
216824次浏览 2544人参与
# 腾讯求职进展汇总 #
206151次浏览 1690人参与
# 你觉得第一学历对求职有影响吗? #
16017次浏览 129人参与
# 产运销实习日记 #
27887次浏览 323人参与
# 阿里求职进展汇总 #
71936次浏览 786人参与
# 上班到公司第一件事做什么? #
14634次浏览 165人参与
# 实习,投递多份简历没人回复怎么办 #
2430316次浏览 34655人参与
# 实习中的菜狗时刻 #
280186次浏览 2759人参与