码迷,mamicode.com
首页 > 其他好文 > 详细

P3252 [JLOI2012]树

时间:2021-01-12 11:00:15      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:节点   jloi2012   方案   时间复杂度   amp   时间   int   target   space   

Aimee

记忆化搜索非常好写,

尤其是从一个朴素的搜索开始改造。

sum是要记录的,但是没必要存在状态里

直接统计一下当前节点是第几步之后的方案数

虽然说时间复杂度没有朴素的优美

但是不会MLE啊

#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#define int long long 
using namespace std;
int n,s;
int Aimee[100001];
int x,y;
int head[100001];
int dp[101][100001];
struct b{
	int to;
	int ne;
}b[100001];
int p;
int ans;
void add(int f,int to){
	p++;
	b[p].ne=head[f];
	b[p].to=to;
	head[f]=p;
	return ;
}
int dfs(int now,int de,int sum){
	if(dp[de][now]) return dp[de][now];
	sum+=Aimee[now];
	if(sum>s)
	return 0;
	if(sum==s)
	return dp[de][now]=1;
	int res=0;
	for(int i=head[now];i;i=b[i].ne){
		res+=dfs(b[i].to,de+1,sum);
	}
	return dp[de][now]=res;
}
signed main(){
	scanf("%lld%lld",&n,&s);
	for(int i=1;i<=n;++i){
		scanf("%d",&Aimee[i]);
	}
	for(int i=1;i<n;++i){
		scanf("%lld%lld",&x,&y);
		add(x,y);
	}
	for(int i=1;i<=n;++i){
		ans+=dfs(i,0,0);
	}
	cout<<ans;
	return 0;
} 

P3252 [JLOI2012]树

标签:节点   jloi2012   方案   时间复杂度   amp   时间   int   target   space   

原文地址:https://www.cnblogs.com/For-Miku/p/14257341.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!