比赛 NOIP模拟赛by mzx Day1 评测结果 WAWAWWWWWW
题目名称 零食店 最终得分 20
用户昵称 浮生随想 运行时间 0.016 s
代码语言 C++ 内存使用 0.49 MiB
提交时间 2016-10-19 20:56:23
显示代码纯文本
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define maxn 110
#define maxm 10010
#define t a[i].to
struct edge{
	int to,next,dis;
}a[maxm<<1];
int n,m,q,len,head[maxn],T,vis[maxn],val[maxn],c,d,cnt;
void insert(int x,int y,int z){
	len++;a[len].to=y;a[len].dis=z;a[len].next=head[x];head[x]=len;
}
int read(){
	int x,f=1;
	char ch;
	while(ch=getchar(),!isdigit(ch))if(ch=='-')f=-1;
	x=ch-'0';
	while(ch=getchar(),isdigit(ch))x=x*10-ch-'0';
	return x*f;
}
void dfs(int x,int sum){
	if(sum==d)return ;
	for(int i=head[x];i;i=a[i].next){
		if(vis[t]!=T&&sum+a[i].dis<=d&&val[t]<=c){
			vis[t]=T;cnt++;
			dfs(t,sum+a[i].dis);
		}
		if(vis[t]!=T&&sum+a[i].dis<=d){
			cnt++;
		}
	}
}
int main(){
	freopen("snackstore.in","r",stdin);
	freopen("snackstore.out","w",stdout);
	n=read();m=read();q=read();
	for(int i=1;i<=n;i++)val[i]=read();
	for(int i=1;i<=n;i++){
		int x=read(),y=read(),z=read();
		insert(x,y,z);
		insert(y,x,z);
	}
	for(int i=1;i<=q;i++){
		int x=read();
		c=read(),d=read();
		T++;vis[x]=T;cnt=0;
		dfs(x,0);
		printf("%d\n",cnt);
	}
	//while(1);
}
/*
5 5 2
2 2 3 4 5
1 2 1
1 3 4
2 3 2
1 4 3
2 5 1
1 1 3
2 1 2
*/