比赛 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;
}