关注
第二个换根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 评论
相关推荐
11-22 16:58
天津大学 数据采集 点赞 评论 收藏
分享
牛客热帖
正在热议
# 25届秋招总结 #
303031次浏览 2690人参与
# 如果不工作真的会快乐吗 #
59463次浏览 519人参与
# 百度开奖 #
163874次浏览 981人参与
# 地方国企笔面经互助 #
3892次浏览 11人参与
# 美团求职进展汇总 #
1328136次浏览 12453人参与
# 选完offer后,你后悔学本专业吗 #
20158次浏览 144人参与
# 阿里云管培生offer #
17808次浏览 297人参与
# 正在实习的你,几点下班 #
52115次浏览 391人参与
# 国央企薪资爆料 #
8628次浏览 69人参与
# 如何一边实习一边秋招 #
992502次浏览 12640人参与
# 提前批简历挂麻了怎么办 #
146569次浏览 1948人参与
# 学历or实习经历,哪个更重要 #
51285次浏览 402人参与
# 海康威视求职进展汇总 #
399047次浏览 3406人参与
# 米哈游求职进展汇总 #
176095次浏览 1458人参与
# 求职遇到的搞笑事件 #
70901次浏览 577人参与
# 投递实习岗位前的准备 #
1179739次浏览 18397人参与
# 面试体验感最好的是哪家? #
85155次浏览 846人参与
# 实习生应该准时下班吗 #
167488次浏览 1159人参与
# 得物求职进展汇总 #
66363次浏览 682人参与
# 网申一定要掌握的小技巧 #
5353次浏览 53人参与
# 招聘要求与实际实习内容不符怎么办 #
10315次浏览 273人参与
# 0offer是寒冬太冷还是我太菜 #
898901次浏览 8015人参与