比赛 |
NOIP模拟赛by mzx Day1 |
评测结果 |
AWAAWWWTTT |
题目名称 |
零食店 |
最终得分 |
30 |
用户昵称 |
LCWhiStLe |
运行时间 |
3.222 s |
代码语言 |
C++ |
内存使用 |
97.08 MiB |
提交时间 |
2016-10-19 21:59:07 |
显示代码纯文本
#include<cstdio>
#include<iostream>
#define MAXN 10010
using namespace std;
struct node {
int to;
int next;
int val;
};
node e[MAXN*2];
int n,m,q,ans,cnt;
int s,c,d;
int a[MAXN];
bool b[1000000][101];
int head[MAXN*2],tot;
inline void read(int&x) {
int f=1;x=0;char c=getchar();
while(c>'9'||c<'0') {if(c=='-') f=-1;c=getchar();}
while(c>='0'&&c<='9') x=10*x+c-48,c=getchar();
x*=f;
}
inline void add(int x,int y,int z) {
e[++tot].to=y;
e[tot].val=z;
e[tot].next=head[x];
head[x]=tot;
}
inline bool pd(int now,int dis) {
for(int i=head[now];i;i=e[i].next) {
int v=e[i].to;
if(!b[cnt][v])
if(dis>=e[i].val&&a[v]<=c)
return false;
}
return true;
}
inline void dfs(int now,int dis) {
for(int i=head[now];i;i=e[i].next) {
int v=e[i].to;
if(!b[cnt][v]&&v) {
if(e[i].val<=dis) {
if(a[v]<=c) {
ans++;
b[cnt][v]=true;
dfs(v,dis-e[i].val);
}
else {
if(pd(v,dis-e[i].val))
b[cnt][v]=true,ans++;
}
}
}
}
}
int main() {
freopen("snackstore.in","r",stdin);
freopen("snackstore.out","w",stdout);
int x,y,z;
read(n);read(m);read(q);
for(int i=1;i<=n;i++) read(a[i]);
for(int i=1;i<=m;i++) {
read(x);read(y);read(z);
add(x,y,z);add(y,x,z);
}
for(int i=1;i<=q;i++) {
read(s);read(c);read(d);
ans=0;cnt=i;
b[i][s]=true;
dfs(s,d);
printf("%d\n",ans);
}
return 0;
}