关注
第二个换根dp
A的代码:#include<bits/stdc++.h>
(35927)#define int long long
using namespace std;
const int N = 1e5+5;
struct Node{
int u,v,next;
}a[N];
int n,m;
int tot,last[N];
int ans[N];
int dp[N];
int sum[N];
void add(int u,int v)
{
tot++;
a[tot].u = u;
a[tot].v = v;
a[tot].next = last[u];
last[u] = tot;
}
void dfs(int u,int fa)
{
for(int i = last[u];i >= 0;i = a[i].next)
{
int v = a[i].v;
if(v == fa)
{
continue;
}
dfs(v,u);
sum[u] += sum[v] + 1;
dp[u] += dp[v] + sum[v]+1;
}
}
void dfs2(int u,int fa)
{
for(int i = last[u]; i >= 0; i = a[i].next)
{
int v = a[i].v;
if(v == fa)
{
continue;
}
ans[v] = dp[v] + (ans[u] - (dp[v] + sum[v] + 1 )) + ( n - sum[v] - 1);
dfs2(v,u);
}
}
signed main()
{
tot = -1;
memset(last,-1,sizeof(last));
cin>>n>>m;
for(int i = 2;i <= n; i++)
{
int u,v;
cin>>u;
add(i,u);
add(u,i);
}
memset(dp,0,sizeof(dp));
dfs(1,-1);
ans[1] = dp[1];
dfs2(1,-1);
for(int i = 1;i <= m; i++)
{
int u;
cin>>u;
cout<<ans[u];
if(i == m)
{
cout<<endl;
}
else{
cout<<" ";
}
}
return 0;
}
查看原帖
1 评论
相关推荐
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你感受到金三银四了嘛? #
44556次浏览 458人参与
# 你都用AI做什么 #
33604次浏览 318人参与
# 虽然0面试,但今天___,夸夸自己 #
4433次浏览 109人参与
# 携程笔试 #
116745次浏览 725人参与
# 春招 / 实习投递,你最焦虑的一件事 #
38645次浏览 796人参与
# 秋招感动瞬间 #
117772次浏览 544人参与
# 今天你投了哪些公司? #
83142次浏览 1622人参与
# 如果给AI员工评绩效,我的答案是…… #
5568次浏览 130人参与
# 找工作,你都让AI帮你做什么? #
4091次浏览 157人参与
# 哪一刻你对工作祛魅了? #
13493次浏览 132人参与
# 实习学不到东西正常吗? #
5350次浏览 84人参与
# 签约/解约注意事项 #
889479次浏览 4728人参与
# 刚工作的你,踩过哪些坑? #
3376次浏览 78人参与
# 滴滴求职进展汇总 #
313415次浏览 2489人参与
# 今年找实习到底有多难? #
11643次浏览 116人参与
# 为了秋招你都做了哪些准备? #
34296次浏览 544人参与
# 快手工作体验 #
312639次浏览 2914人参与
# AI时代下,你的岗位要求有什么变化? #
6023次浏览 114人参与
# 苦尽甘来时,再讲来时路 #
74169次浏览 958人参与
# 2023毕业生求职有问必答 #
238792次浏览 1676人参与