求助 24 分
查看原帖
求助 24 分
490484
include13_fAKe楼主2024/10/5 18:54
#include<bits/stdc++.h>
using namespace std;

int n,m;
int c[2000001];
int k[2000001];
bool s[2000001];
vector<int> g[2000001];
void dfs(int u,int fa){
	for(int i=0;i<g[u].size();i++){
		int v=g[u][i];
		dfs(v,u);
	}
	if(k[fa]-1+k[u]+c[u]+c[fa]<=m&&u!=0){
		s[u]=true;
		k[fa]+=(k[u]-1);
		c[fa]+=c[u]; 
	}
} 
int main(){
//	freopen("forest.in","r",stdin);
//	freopen("forest.out","w",stdout);
	scanf("%d%d",&n,&m);
	for(int i=0;i<n;i++)	scanf("%d",&c[i]);
	for(int i=0;i<n;i++){
		scanf("%d",&k[i]);
		for(int j=1;j<=k[i];j++){
			int num;
			scanf("%d",&num);
			g[i].push_back(num);
		}
	}
	dfs(0,-1);
	int ans=0;
	for(int i=1;i<n;i++)
		if(s[i])	ans++;
	printf("%d\n",ans);
	return 0;
}
/*
10 4 
0 2 2 2 4 1 0 4 1 1 
3 6 2 3 
1 9 
1 8 
1 1 
0
0
2 7 4 
0
1 5 
0
*/
2024/10/5 18:54
加载中...