比赛 NOIP模拟赛by mzx Day1 评测结果 AAAATTTTTT
题目名称 零食店 最终得分 40
用户昵称 Hzoi_Yniverse 运行时间 6.032 s
代码语言 C++ 内存使用 0.49 MiB
提交时间 2016-10-19 21:43:22
显示代码纯文本
#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("snackstore.in","r",stdin);
	freopen("snackstore.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);
	}
	//system("pause");
	return 0;
}
/*
5 5 233
1 2 3 4 5
1 2 1
1 3 4
2 3 2
1 4 3
2 5 1

5 4 10
1 1 3
2 1 2
5 100 1
4 4 3
 */