记录编号 326697 评测结果 AAAAAAATTT
题目名称 零食店 最终得分 70
用户昵称 GravatarMarvolo 是否通过 未通过
代码语言 C++ 运行时间 3.120 s
提交时间 2016-10-21 13:00:48 内存使用 13.71 MiB
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<vector>
#include<cstring>
using namespace std;

int n,m,q,dmax,h,ans,qd,i,x,y,Z;
int z[110],d[110],s[110];
int ld[110][110];
bool v[110],bh[110];
vector <int> l[110],l2[110];

inline int read(){
	int p=0,c=getchar();
	while (c<'0'||c>'9')	c=getchar();
	while (c>='0'&&c<='9')	p=p*10+c-48,c=getchar();
	return p;
}
inline int min(int a,int b){return (a<b)?a:b;}

inline void SPFA(){
	int t=1,w=0,dd=0,i=0;
	ans=0;
	memset(z,0,sizeof(z));	memset(d,0x3f3f3f3f,sizeof(d));	memset(v,0,sizeof(v));
	memset(bh,0,sizeof(bh));
	z[t]=qd;	v[qd]=1;	bh[qd]=1;	d[qd]=0;
	while (w!=t){
		w=(w+1)%n;	dd=z[w];	v[dd]=0;
		for (i=0;i<l[dd].size();i++)
			if (d[dd]+l2[dd][i]<=dmax&&d[dd]+l2[dd][i]<d[l[dd][i]]){
				d[l[dd][i]]=d[dd]+l2[dd][i];
				if (!bh[l[dd][i]])	ans++,bh[l[dd][i]]=1;
				if (s[l[dd][i]]>h)	continue;   //超过限制不再松弛
				if (!v[l[dd][i]]){
					v[l[dd][i]]=1;	t=(t+1)%n;	z[t]=l[dd][i];	continue;	
				}
			}   //不能到都是扯淡
	}
	printf("%d\n",ans);
}

int main(){
	freopen("snackstore.in","r",stdin);
	freopen("snackstore.out","w",stdout);
	n=read();	m=read();	q=read();
	for (i=1;i<=n;i++)	s[i]=read();
	memset(ld,0x3f3f3f3f,sizeof(ld));
	for (i=1;i<=m;i++){
		x=read();	y=read();	Z=read();
		if (x==y)	continue;
		ld[x][y]=min(ld[x][y],Z);
		if (ld[x][y]!=Z)	continue;
		l[x].push_back(y);	l[y].push_back(x);
		l2[x].push_back(Z);	l2[y].push_back(Z);
	}
	while (q--){
		qd=read();	h=read();	dmax=read();
		SPFA();
	}
	return 0;
}