50 pts求助
查看原帖
50 pts求助
886055
MoonCake2011楼主2023/6/26 22:26
#include<bits/stdc++.h>
using namespace std;
int n;
int head[20010],to[40010],val[40010],nxt[40010],tot;
void add(int x,int y,int z){
	to[++tot]=y,val[tot]=z;
	nxt[tot]=head[x];
	head[x]=tot;
}
int start;
int dis[20010],cnt;
void dfs(int x,int fa){
	bool p=1;
	for(int i=head[x];i;i=nxt[i]){
		if(to[i]==fa) continue;
		dis[to[i]]=dis[x]-val[i];
		if(dis[to[i]]<=0 && p==1){
			cnt++,p=0;
			break;
		}
	}
	for(int i=head[x];i;i=nxt[i]){
		if(to[i]==fa) continue;
		if(p==0) dis[to[i]]=start-val[i];
		dfs(to[i],x);
	}
}
int maxn;
int main() {
	cin>>n;
	for(int i=1;i<=n;i++){
		int m;
		cin>>m;
		for(int j=1;j<=m;j++){
			int u,x;
			cin>>u>>x;
			add(i,u,x);
			maxn=max(maxn,x);
		}
	}
	cin>>start;
	if(maxn>=start){
		cout<<"No solution.";
		return 0;
	}
	dis[1]=start;
	dfs(1,0);
	cout<<cnt;
	return 0;
} 
2023/6/26 22:26
加载中...