比赛 NOIP模拟赛by mzx Day1 评测结果 AWWWTTTTTT
题目名称 零食店 最终得分 10
用户昵称 灰里城 运行时间 6.011 s
代码语言 C++ 内存使用 0.59 MiB
提交时间 2016-10-19 21:28:42
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <cstring>
#include <queue>
using namespace std;

const int maxn=110,maxq=1000010;

int V[maxn];
int tot=0,head[maxn];
struct E{
	int to,nxt,dis;
}e[maxn*maxn<<1];
//int dis[maxn];
struct N{
	int id,d,cnt;
	N(int a,int b,int c):id(a),d(b),cnt(c){}
	bool operator < (const N &a)const{
		return d>a.d;
	}
};

void Add(int u,int v,int d){
	e[++tot].to=v;
	e[tot].nxt=head[u];
	e[tot].dis=d;
	head[u]=tot;
}
int Query(int s,int c,int d){
	int res=0,tmp=V[s]; V[s]=0;
//	memset(dis,0x3f,sizeof(dis)); dis[s]=0;
	priority_queue<N> q; q.push(N(s,0,0));
	while(!q.empty()){
		N p=q.top(); q.pop();
		int u=p.id; ++res;
		if(V[u]>c)continue;
		for(int i=head[u];i;i=e[i].nxt){
			int v=e[i].to;
			if(v==s||p.d+e[i].dis>d)continue;
			q.push(N(v,p.d+e[i].dis,p.cnt+1));
		}
	}
	V[s]=tmp;
	return res-1;
}
int main(){
	freopen("snackstore.in","r",stdin);
	freopen("snackstore.out","w",stdout);
	int n,m,qy,x,y,d;
	scanf("%d%d%d",&n,&m,&qy);
	for(int i=1;i<=n;++i) scanf("%d",&V[i]);
	for(int i=1;i<=m;++i){
		scanf("%d%d%d",&x,&y,&d);
		Add(x,y,d); Add(y,x,d);
	}
	for(int i=1;i<=qy;++i){
		scanf("%d%d%d",&x,&y,&d);
		printf("%d\n",Query(x,y,d));
	}
//	getchar();getchar();
	fclose(stdin);fclose(stdout);
	return 0;
}