CCC 加拿大国赛第一轮S组t3 Unfriend--zhengjun
树形
用 表示在编号为 的子树中共有多少种方案。
显然,
后面的那个 就是考虑自身不要的情况。最后答案要减掉这个
代码
#include<cstdio>
using namespace std;
int n,x;
struct edges{
int to,nex;
}edge[1001];
int head[1001],kk;
void add(int u,int v){
edge[++kk]=(edges){v,head[u]};head[u]=v;
}
int f[1001];
void dfs(int u){
f[u]=1;
for(int i=head[u];i;i=edge[i].nex){
int v=edge[i].to;
dfs(v);
f[u]*=f[v];
}
f[u]++;
}
int main(){
scanf("%d",&n);
for(int i=1;i<n;i++)scanf("%d",&x),add(x,i);
dfs(n);
printf("%d",f[n]-1);
return 0;
}
分类:
加拿大国赛 CCC
标签:
【动态规划】树形dp
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 全程不用写代码,我用AI程序员写了一个飞机大战
· DeepSeek 开源周回顾「GitHub 热点速览」
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了