比赛 |
模拟训练 |
评测结果 |
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;
}