比赛 |
NOIP模拟赛by mzx Day1 |
评测结果 |
AAAWWWWTWT |
题目名称 |
零食店 |
最终得分 |
30 |
用户昵称 |
infinityedge |
运行时间 |
2.999 s |
代码语言 |
C++ |
内存使用 |
30.90 MiB |
提交时间 |
2016-10-19 20:28:07 |
显示代码纯文本
#include<iostream>
#include<cstring>
#include<algorithm>
#include<cstdio>
#include<cmath>
using namespace std;
typedef long long ll;
struct wn{
int s,c,d,bh;
}e[2001412];
int a[105][105];
int n,m,q;
int b[105],xh[105];
int cmp(wn aa,wn bb){
return aa.c<bb.c;
}
int cmp2(int aa,int bb){
return b[aa]<b[bb];
}
void gx(int k){
for(int i=1;i<=n;i++){
for(int j=1;j<=n;j++){
a[i][j]=min(a[i][j],a[i][k]+a[k][j]);
}
}
}
int main(){
freopen("snackstore.in","r",stdin);
freopen("snackstore.out","w",stdout);
scanf("%d%d%d",&n,&m,&q);
for(int i=1;i<=n;i++){
scanf("%d",&b[i]);
}
int x,y,l;
memset(a,0x3f,sizeof(a));
for(int i=1;i<=n;i++){
a[i][i]=0;
}
for(int i=1;i<=m;i++){
scanf("%d%d%d",&x,&y,&l);
a[x][y]=min(a[x][y],l);
a[y][x]=min(a[y][x],l);
}
for(int i=1;i<=q;i++){
scanf("%d%d%d",&e[i].s,&e[i].c,&e[i].d);
e[i].bh=i;
}
sort(e+1,e+q+1,cmp);
for(int i=1;i<=n;i++){
xh[i]=i;
}
sort(xh+1,xh+n+1,cmp2);
int point=1;
for(int i=1;i<=q;i++){
while(b[point]<=e[i].c&&point<=n){
gx(xh[point]);
point++;
}
int cnt=0;
for(int j=1;j<=n;j++){
if(j!=e[i].s&&a[e[i].s][j]<=e[i].d)cnt++;
}
printf("%d\n",cnt);
}
return 0;
}