比赛 NOIP模拟赛by mzx Day1 评测结果 WAWAWWWTTT
题目名称 零食店 最终得分 20
用户昵称 Riolu 运行时间 3.226 s
代码语言 C++ 内存使用 0.83 MiB
提交时间 2016-10-19 21:53:21
显示代码纯文本
/*=========================================* 
 * Auther: Riolu
 * Time: 2016.10.19
 * Copyright 2016 Riolu. All Rights Reserved. 
 *=========================================*/
#include<cstdio>
#include<cstdlib>
#include<iostream>
#include<algorithm>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<cmath>
#include<string>
#include<cstring>
using namespace std;

const int N=101;
const int I=1e9+5;
int n,m,qu,k;

int h[N];
struct note{
	int v,w;					
	bool operator < (const note &x) const  
		{return x.w<w;}   		
	}t,t1;	
vector<note> u[N];				
priority_queue<note> q;				

int dis[N],							
	vis[N];							




int main(){

	
	freopen("snackstore.in","r",stdin);
	freopen("snackstore.out","w",stdout);
	int i,j,w,v,s,d,ans,l;


	
	scanf("%d%d%d",&n,&m,&qu);
	for(i=1;i<=n;i++)
		scanf("%d",&h[i]);

		
		
	for(i=1;i<=m;i++){
		scanf("%d%d%d",&j,&t.v,&t.w);
		u[j].push_back(t);
		swap(j,t.v);
		u[j].push_back(t);
		}
		
	for(int ti=1;ti<=qu;ti++){
		ans=0;
		scanf("%d%d%d",&s,&w,&d);
		
			
	memset(dis,60,sizeof(dis));		
	dis[s]=0;vis[s]=1;l=u[s].size();
	for(i=0;i<l;i++){				
		t=u[s][i];
		if(h[t.v]<=w){
			dis[t.v]=t.w;
			q.push(t);
			}
			else dis[t.v]=t.w;
		}
		
		
	for(i=1;i<n;i++){
		if(q.size()==0)break;		
		t=q.top();q.pop();		
		while(vis[t.v] && q.size() ){t=q.top();q.pop();}
		k=t.v;vis[k]=1;				
		l=u[k].size();
		for(j=0;j<l;j++){		
			v=u[k][j].v;
			if(dis[v]>t.v+u[k][j].w)
				if(h[v]<=w){
				dis[v]=t.v+u[k][j].w;
				t1.v=v;t1.w=dis[v];
				q.push(t1);
				}
			dis[v]=min(dis[v],t.v+u[k][j].w);
				
			}
		}
	
	for(i=1;i<=n;i++){
		//cout<<dis[i]<<' ';

		if(dis[i]<=d && i!=s)ans++;
		}
		cout<<ans<<endl;
		
		}

	return 0;
	}
/*

	
	
	*/