比赛 2024国庆练习1 评测结果 MMMMMMMMMM
题目名称 零食店 最终得分 0
用户昵称 会挽弯弓满月 运行时间 0.008 s
代码语言 C++ 内存使用 1.33 MiB
提交时间 2024-10-04 17:32:32
显示代码纯文本
#include <bits/stdc++.h> 
#define ll long long
const int N=1e3+10;
const int M=1e4+10;
using namespace std;
void read(ll &x) 
{
	x=0;
	ll f=1;
	char c=getchar();
	while(c<'0'||c>'9')
	{
		if(c=='-') f=-1;
		c=getchar();
	}
	while(c>='0'&&c<='9')
	{
		x=x*10+c-'0';
		c=getchar();
	}
	x*=f;
}
void write(ll x)
{
	if(x<0)
	{
		putchar('-');
		x=-x;
	}
	if(x>9) write(x/10);
	putchar(x%10+'0');
}
ll n,m,q,s,c,d;
ll v[N];
ll a[M][M];
ll nxt[N];
ll x,y;
ll ans;
bool f[N];
bool ff[N];
void dfs(ll x,ll tl)
{
	f[x]=1;
	ans++;
	ll t=0;
	for(int i=1;i<=n;i++)
	{
		if(f[i]) continue;
		if(ff[i]) continue;
		if(a[x][i]>tl||a[x][i]==0) continue;
		dfs(i,tl-a[x][i]);
		t++;
	}
	if(t==0&&nxt[x]>1)
	{
		for(int i=1;i<=n;i++) 
		{
			if(!f[i])
			{
				ans++;
				break;
			}
		}
	}
}
int main()
{
	freopen("snackstore.in","r",stdin);
	freopen("snackstore.out","w",stdout);
	read(n);read(m);read(q);
	for(int i=1;i<=n;i++)
	{
		read(v[i]);
	}
	for(int i=1;i<=m;i++)
	{
		read(x);read(y);
		read(a[x][y]);
		a[y][x]=a[x][y];
		nxt[x]++;
		nxt[y]++;
	}
	while(q--)
	{
		ans=0;
		memset(f,0,sizeof(f));
		memset(ff,0,sizeof(ff));
		read(s);read(c);read(d);
		for(int i=1;i<=n;i++)
		{
			if(v[i]>c) ff[i]=1;
		}
		dfs(s,d);
		write(ans);
		putchar('\n');
	}
	return 0;
}