记录编号 |
326936 |
评测结果 |
AAAAAAATTT |
题目名称 |
零食店 |
最终得分 |
70 |
用户昵称 |
infinityedge |
是否通过 |
未通过 |
代码语言 |
C++ |
运行时间 |
3.065 s |
提交时间 |
2016-10-21 17:41:42 |
内存使用 |
34.68 MiB |
显示代码纯文本
#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 aans[2001412];
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[xh[point]]<=e[i].c&&point<=n) {
gx(xh[point]);
point++;
// printf("%d\n",xh)
}
int cnt=0;
for(int j=1; j<=n; j++) {
if(j!=e[i].s&&a[e[i].s][j]<=e[i].d)cnt++;
}
aans[e[i].bh]=cnt;
}
for(int i=1;i<=q;i++){
printf("%d\n",aans[i]);
}
return 0;
}