社区讨论

爆0,求大佬找错!!!Orz

P3252[JLOI2012] 树参与者 2已保存回复 1

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
1 条
当前快照
1 份
快照标识符
@mi6wmn47
此快照首次捕获于
2025/11/20 12:01
4 个月前
此快照最后确认于
2025/11/20 12:01
4 个月前
查看原帖
CPP
#include <iostream> 
#define maxN 100010
using namespace std;
int N,M;
int x[maxN];
struct edge {
	int son;
	int next;
} E[maxN];
int first[maxN],ne;
int iss[maxN];  //是否为son,寻找root;
int root;  //根节点; 
int ans;
void dfs(int s,int sum);
int main()  {
	cin>>N>>M;
	for(int i=1;i<=N;i++)  {
		cin>>x[i];
	}
	int a,b;  //b为a的son; 
	for(int i=1;i<N;i++)  {  //N-1条边; 
		cin>>a>>b;
		iss[b]=1;  //标记为son; 
		E[++ne]=(edge){b,first[a]};//由father指向son; 
		first[a]=ne;
	}
	//find root;
	for(int i=1;i<=N;i++)  {
		if(!iss[i])  {  //未成为过son,即是root;
		    root=i;
			break; 
		}
	}
	dfs(root,x[root]);
	cout<<ans;
	return 0;
}
void dfs(int s,int sum)  {
	int t;
	for(int i=first[s];i;i=E[i].next)  {
		t=E[i].son;
		dfs(t,x[t]);
	}
	if(sum==M)  {
		ans++;
	}
	else if(sum<M)  {
		for(int i=first[s];i;i=E[i].next)  {
		    t=E[i].son;
		    dfs(t,x[t]+sum);
	    }
	}
	return;
}

回复

1 条回复,欢迎继续交流。

正在加载回复...