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