50pts求调
查看原帖
50pts求调
1111742
mincrafter_or_cy楼主2024/10/2 20:06
#include<bits/stdc++.h>
using namespace std;
int n,cnt,ans=0,val;
struct eage{
	int to,w,next;
}e[40000];
int head[20000];
void add(int u,int v,int w){
	e[++cnt].to=v;
	e[cnt].w=w;
	e[cnt].next=head[u];
	head[u]=cnt;
}
int dfs(int x,int fa,int k){
	int sum=0,a;
	for(int i=head[x];i;i=e[i].next){
		if(e[i].to==fa) continue;
		if(e[i].w>=val) return -1;
		if(e[i].w>=k){sum++;k=val;}
		a=dfs(e[i].to,x,k-e[i].w);
		if(a==-1) return -1;
		sum+=a;
	}
	return sum;
}
int main(){
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin>>n;
	for(int i=1,k,v,w;i<=n;i++){
		cin>>k;
		for(int j=1;j<=k;j++){
			cin>>v>>w;
			add(i,v,w);
		}
	}
	cin>>val;
	ans=dfs(1,0,val);
	if(ans==-1) cout<<"No solution."<<endl;
	else cout<<ans<<endl;
	return 0;
}
2024/10/2 20:06
加载中...