关注
第二个换根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 评论
相关推荐

点赞 评论 收藏
分享
06-09 11:12
重庆移通学院 运营 不要停下啊:大二打开牛客,你有机会开卷了,卷起来
,去找课程学习,在牛客上看看大家面试笔试都需要会什么,岗位有什么需求就去学什么,努力的人就一定会有收获,这句话从来都经得起考验,像我现在大三了啥也不会,被迫强行考研,炼狱难度开局,啥也不会
,找工作没希望了,考研有丝丝机会
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 国企是理工四大天坑的最好选择吗 #
13249次浏览 94人参与
# 如果可以,你希望哪个公司来捞你 #
99120次浏览 409人参与
# leader认为你工作不认真怎么办 #
30006次浏览 132人参与
# 如果公司给你放一天假,你会怎么度过? #
16552次浏览 127人参与
# 三一重工求职进展汇总 #
14545次浏览 66人参与
# 我的国央企投递进展 #
46029次浏览 287人参与
# 机械人,你被简历秒挂的企业有哪些? #
42495次浏览 280人参与
# 通信/硬件公司求职体验 #
123911次浏览 865人参与
# 总结:哪家公司面试体验感最差 #
60650次浏览 276人参与
# 你认为小厂实习有用吗? #
30780次浏览 349人参与
# 我和mentor的爱恨情仇 #
58189次浏览 350人参与
# 哪一瞬间觉得自己长大了 #
14562次浏览 339人参与
# 说说你知道的学历厂 #
62268次浏览 376人参与
# 你找工作的时候用AI吗? #
28175次浏览 346人参与
# 秋招最大的收获是什么? #
37017次浏览 311人参与
# 技术岗笔试题求解 #
78042次浏览 1012人参与
# OPPO求职进展汇总 #
662410次浏览 5036人参与
# 面试尴尬现场 #
46219次浏览 305人参与
# 计算机有哪些岗位值得去? #
22789次浏览 218人参与
# 下班后的时间你怎么安排 #
14135次浏览 193人参与