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