比赛 NOIP模拟赛by mzx Day1 评测结果 WWEEEEEEEE
题目名称 零食店 最终得分 0
用户昵称 1azyReaper 运行时间 1.073 s
代码语言 C++ 内存使用 0.55 MiB
提交时间 2016-10-19 20:55:58
显示代码纯文本
#include <fstream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cmath>
#define maxn 111
#define max 20010
#define ppap 10000111
using namespace std;
ifstream fin("snackstore.in");
ofstream fout("snackstore.out");
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int m,n,q,head[110],vv[110]={0},ed=0,vis[110],x,y,l,c,s,d;
class node
{
	public:
		int next,to,val;
}e[max];
int add(int u,int v,int w)
{
	e[++ed].next=head[u],head[u]=ed,e[ed].val=w,e[ed].to=v;
	return 0;
}
int adde(int u,int v,int w)
{
	add(u,v,w);
	add(v,u,w);
	return 0;
}
int dfs(int start,int ad)
{
	vis[start]=1;
	int abc=0;
	for(int i=head[start];i;i=e[i].next)
	{
		if(!vis[e[i].to]&&ad+e[i].val<=d)
			abc++;
		if(vv[e[i].to]<=c)
			abc+=dfs(e[i].to,ad+e[i].val);
	}
	return abc;
}
int main(int argc, char** argv) 
{
	fin>>n>>m>>q;
	for(int i=1;i<=n;i++)
	{
		fin>>vv[i];
	}
	for(int i=1;i<=m;i++)
	{
		fin>>x>>y>>l;
		adde(x,y,l);
	}
	for(int i=1;i<=q;i++)
	{
		fin>>s>>c>>d;
		memset(vis,0,sizeof(vis));
		fout<<dfs(s,0)<<endl;
	}
	fin.close();
	fout.close();
	return 0;
}