站外题求助
  • 板块学术版
  • 楼主zhangqixuan0819
  • 当前回复1
  • 已保存回复1
  • 发布时间2024/12/11 19:24
  • 上次更新2024/12/11 22:21:25
查看原帖
站外题求助
1250982
zhangqixuan0819楼主2024/12/11 19:24

题目

#include<bits/stdc++.h>
#define rep(fro,ton) for(int i = fro; i <= ton; ++i)
#define Rep(fro,ton) for(int j = fro; j < ton; ++j)
#define ll long long
#define ull unsigned long long
#define zhangqixuan return
#define code 0
#define N 100001
using namespace std;
int n, S;
struct edge {
	int to, dis, next;
} e[2 * N];
int head[N], cnt=0;
void add_edge(int u, int v, int d) {
	e[++cnt].dis = d;
	e[cnt].to = v;
	e[cnt].next = head[u];
	head[u] = cnt;

}
int ans;
int a[N], s[N], st[N];
void dfs(int u, int fa) {
	s[u] = s[fa] + a[u];
	st[s[u]]++;
	if(s[u] - S >= 0)ans += st[s[u] - S];
	for (int i = head[u]; i; i = e[i].next)
		if (e[i].to != fa)
			dfs(e[i].to, u);
	st[s[u]]--;

}

int main() {
//	ios::sync_with_stdio(0);
	cin >> n >> S;
	rep(1, n) cin >> a[i];
	Rep(1, n) {
		int x, y;
		cin >> x >> y;
			add_edge(x,y,1);
	//		add_edge(y, x, 1);
	}
	st[0] = 1;
	dfs(1, 0);
	cout << ans << endl;
	return 0;
}
2024/12/11 19:24
加载中...