记录编号 326936 评测结果 AAAAAAATTT
题目名称 零食店 最终得分 70
用户昵称 Gravatarinfinityedge 是否通过 未通过
代码语言 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;
}