比赛 NOIP模拟赛by mzx Day1 评测结果 WAWWWWWTTT
题目名称 零食店 最终得分 10
用户昵称 jmisnal 运行时间 3.108 s
代码语言 C++ 内存使用 0.48 MiB
提交时间 2016-10-19 21:56:40
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#define ll long long
#define inf 0x7fffffff
using namespace std;
int read()
{
	int x=0,f=1;char ch=getchar();
	while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
	while(ch>='0'&&ch<='9')x=x*10+ch-'0',ch=getchar();
	return x*f;
}
ll qs[105][105];
ll minc[105][105]; 
int ans;
int n,m,q;
int s,c,d;;
int v[105];
bool vis[105];
void dfs(int now,ll yy,int fa)
{
	if(vis[now])return;
	vis[now]=1;
	if(yy<=d)
		ans++;
	else return ;
	if(v[now]>c)return;
	for(int i=1;i<=n;i++)
	{
		if(i==now||i==fa)continue;
		if(v[i]>c)continue;
		dfs(i,yy+qs[now][i],now);
	}
}
int main()
{
//	freopen("abcd.in","r",stdin);
	freopen("snackstore.in","r",stdin);
	freopen("snackstore.out","w",stdout);
	n=read();m=read();q=read();
	for(int i=1;i<=n;i++)	
		v[i]=read();
	for(int i=1;i<=n;i++)
		for(int j=1;j<=n;j++)
			qs[i][j]=inf;
//	for(int i=1;i<=n;i++)
//		minc[i][i]=0;
	int x,y,z;
	for(int i=1;i<=m;i++)
	{
		x=read();y=read();z=read();
		if(qs[x][y]>z)
		{
			qs[x][y]=qs[y][x]=z;
		}
	}
	for(int i=1;i<=q;i++)
	{
		ans=0;		
		memset(vis,0,sizeof(vis));
		
		s=read();c=read();d=read();
		vis[s]=1;
		for(int j=1;j<=n;j++)
		{
			if(s==j||qs[s][j]==inf)continue;
			if(qs[s][j]<=d)
				dfs(j,qs[s][j],s);
		}
		printf("%d\n",ans);
	}
				
	return 0;
}