毒瘤贪心。
第一他长得太像贪心了。
而且下标位置是0-n-1
我最先TMMMP看样例以为是一个仙人掌。。。。
贪心,每次选最优的,也就是代价最小的。
注意删去一个儿子,c【i】要相对-1
#include<algorithm>
#include<cmath>
#include<cstring>
#include<cstdio>
#include<iostream>
using namespace std;
const int N=2e6;
int l[N]={0};
int r[N]={0};
int c[N]={0};
int a[N]={0};
int n,m;
int ans=0;
int cnt=0;
bool cmp(int A,int B){
return c[A]<c[B];
}
void dfs(int u){
for(int i=l[u];i<=r[u];i++){
dfs(a[i]);
c[u]++;
}
sort(a+l[u],a+r[u]+1,cmp);
for(int i=l[u];i<=r[u];i++){
if(c[u]+c[a[i]]-1<=m){
c[u]=c[u]+c[a[i]]-1;
ans++;
}
else break;
}
}
int main(){
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++){
scanf("%d",&c[i]);
}
for(int i=1;i<=n;i++){
int all;
scanf("%d",&all);
l[i]=cnt+1;
while(all--){
int v;
scanf("%d",&v);
v++;
a[++cnt]=v;
}
r[i]=cnt;
}
dfs(1);
cout<<ans;
}