比赛 模拟训练 评测结果 AAAWTTTTTT
题目名称 零食店 最终得分 30
用户昵称 FFF团 运行时间 6.001 s
代码语言 C++ 内存使用 0.32 MiB
提交时间 2017-06-15 21:09:32
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;
struct edge{
	int x;
	int y;
	int l_cost; 
};
vector<edge>g[101];
bool vis[101];
int cost[101];
int anss,s,c,d,n,m,q,x,y,z;
int hh;
void dfs(long long cur,long long deep,int ans){
	vis[cur]=1;
	if(cost[cur]>c)hh--;
	//cout<<cur<<"---"<<deep<<endl;
	if(deep>=d||(!hh)){
		anss=max(anss,ans);
		vis[cur]=0;
		return ;
	}
	for(int i=0;i<g[cur].size();i++){
		edge ttt=g[cur][i];
		//cout<<ttt.x<<"--"<<ttt.y<<":"<<ttt.l_cost<<" "<<cost[ttt.y]<<"               ";
		if(!vis[ttt.y])
		dfs(ttt.y,deep+ttt.l_cost,ans+1);
	}
	vis[cur]=0;
	return ;
}
int main(){
	freopen("snackstore.in","r",stdin);
	freopen("snackstore.out","w",stdout);
	scanf("%d%d%d",&n,&m,&q);
	for(int i=1;i<=n;i++)scanf("%d",&cost[i]);
	//for(int i=1;i<=n;i++)cout<<cost[i]<<" ";
	for(int i=1;i<=m;i++){
		scanf("%d%d%d",&x,&y,&z);
		edge t;
		t.l_cost=z;
		t.y=y;
		t.x=x;
		g[x].push_back(t);
		t.x=y;
		t.y=x;
		g[y].push_back(t);
	}
	//for(int i=1;i<=n;i++)
	//for(int j=0;j<g[i].size();j++)
	//cout<<i<<"--"<<g[i][j].y<<":"<<g[i][j].l_cost<<endl;
	for(int i=1;i<=q;i++){
		scanf("%d%d%d",&s,&c,&d);
		hh=1;
		memset(vis,0,sizeof(vis));
		anss=-1;
		if(cost[s]>c)hh=2;
		dfs(s,0,1);
		printf("%d\n",anss);
	}
	return 0;
}