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