比赛 |
NOIP模拟赛by mzx Day1 |
评测结果 |
WAWAWWWWWW |
题目名称 |
零食店 |
最终得分 |
20 |
用户昵称 |
浮生随想 |
运行时间 |
0.016 s |
代码语言 |
C++ |
内存使用 |
0.49 MiB |
提交时间 |
2016-10-19 20:56:23 |
显示代码纯文本
#include<cstdlib>
#include<iostream>
#include<cstring>
#include<cstdio>
using namespace std;
#define maxn 110
#define maxm 10010
#define t a[i].to
struct edge{
int to,next,dis;
}a[maxm<<1];
int n,m,q,len,head[maxn],T,vis[maxn],val[maxn],c,d,cnt;
void insert(int x,int y,int z){
len++;a[len].to=y;a[len].dis=z;a[len].next=head[x];head[x]=len;
}
int read(){
int x,f=1;
char ch;
while(ch=getchar(),!isdigit(ch))if(ch=='-')f=-1;
x=ch-'0';
while(ch=getchar(),isdigit(ch))x=x*10-ch-'0';
return x*f;
}
void dfs(int x,int sum){
if(sum==d)return ;
for(int i=head[x];i;i=a[i].next){
if(vis[t]!=T&&sum+a[i].dis<=d&&val[t]<=c){
vis[t]=T;cnt++;
dfs(t,sum+a[i].dis);
}
if(vis[t]!=T&&sum+a[i].dis<=d){
cnt++;
}
}
}
int main(){
freopen("snackstore.in","r",stdin);
freopen("snackstore.out","w",stdout);
n=read();m=read();q=read();
for(int i=1;i<=n;i++)val[i]=read();
for(int i=1;i<=n;i++){
int x=read(),y=read(),z=read();
insert(x,y,z);
insert(y,x,z);
}
for(int i=1;i<=q;i++){
int x=read();
c=read(),d=read();
T++;vis[x]=T;cnt=0;
dfs(x,0);
printf("%d\n",cnt);
}
//while(1);
}
/*
5 5 2
2 2 3 4 5
1 2 1
1 3 4
2 3 2
1 4 3
2 5 1
1 1 3
2 1 2
*/