记录编号 326630 评测结果 AAAAAAAAAA
题目名称 零食店 最终得分 100
用户昵称 Gravatar岂是蓬蒿人 是否通过 通过
代码语言 C++ 运行时间 2.502 s
提交时间 2016-10-21 11:19:52 内存使用 4.85 MiB
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<queue>
#define bignum 1000000001
#define maxx 110
using namespace std;
int n,m,r,topt,sum;
int c[maxx],dis[maxx][maxx][maxx];
struct node
{
	int x;
	int w;
}t[maxx];
int init()
{
	int x=0,f=1;char c=getchar();
	while(c<'0'||c>'9'){if(c=='-')f=-1;c=getchar();}
	while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
	return x*f;
}
int cmp(node a,node b)
{
	return a.x<b.x;
}
void floyed()
{
	for(int k=1;k<=n;k++)
	{
		for(int i=1;i<=n;i++)
		{
			for(int j=1;j<=n;j++)
			dis[k][i][j]=min(dis[k-1][i][j],dis[k-1][i][t[k].w]+dis[k-1][t[k].w][j]);
		}
	}
	for(int i=0;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		sort(dis[i][j]+1,dis[i][j]+n+1);
	}
}
int main()
{
	freopen("snackstore.in","r",stdin);
	freopen("snackstore.out","w",stdout);
	n=init();m=init();r=init();
	for(int i=1;i<=n;i++)
	{
		t[i].x=init();
		t[i].w=i;
		c[i]=t[i].x;
	}
	sort(t+1,t+n+1,cmp);
	sort(c+1,c+n+1);
	for(int i=0;i<=n;i++)
	  for(int j=1;j<=n;j++)
		for(int k=1;k<=n;k++)
		  dis[i][j][k]=bignum;
	for(int i=1;i<=m;i++)
	{
		int x,y,z;
		x=init();y=init();z=init();
		if(z<dis[0][x][y])
		dis[0][x][y]=dis[0][y][x]=z;
	}
	for(int i=1;i<=n;i++)dis[0][i][i]=0;
	floyed();
	for(int i=1;i<=r;i++)
	{
		int x,y,z;
		x=init();y=init();z=init();
		int pos=upper_bound(c+1,c+n+1,y)-c-1; 
		int tot=upper_bound(dis[pos][x]+1,dis[pos][x]+n+1,z)-dis[pos][x]-1;
		printf("%d\n",tot-1);
	}
	return 0;
}