比赛 NOIP模拟赛by mzx Day1 评测结果 EEEEEEEEEE
题目名称 零食店 最终得分 0
用户昵称 NewBee 运行时间 1.162 s
代码语言 C++ 内存使用 0.49 MiB
提交时间 2016-10-19 21:15:54
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <map>
using namespace std;
struct Edge{ int to,next,dis; }e[20010];
int head[110],val[110],flag[110];
int Sum,vis,len;
void Insert(int x,int y,int z){
	len++;
	e[len].to=y; e[len].dis=z;
	e[len].next=head[x]; head[x]=len;
}
void Dfs(int x,int y,int z){
	for(int i=head[x];i;i=e[i].next){
		int j=e[i].to;
		if(z>=e[i].dis&&flag[j]!=vis){
			if(!flag[j]) Sum++; 
			flag[j]=vis;
			if(val[j]<=y) Dfs(j,y,z-e[i].dis);
			flag[j]++;
		}
	}
}
int main(){
	freopen("nt2011_hop.in","r",stdin);
	freopen("nt2011_hop.out","w",stdout);
	int n,m,q;scanf("%d%d%d",&n,&m,&q);
	for(int i=1;i<=n;i++) scanf("%d",&val[i]);
	for(int i=1;i<=m;i++){
		int x,y,z;scanf("%d%d%d",&x,&y,&z);
		Insert(x,y,z); Insert(y,x,z);
	}
	for(int i=1;i<=q;i++){
		int x,y,z;scanf("%d%d%d",&x,&y,&z);
		Sum=0; vis=0; memset(flag,0,sizeof(flag)); vis++;
		flag[x]=vis; Dfs(x,y,z);
		printf("%d\n",Sum);
	}
	return 0;
}