比赛 NOIP模拟赛by mzx Day1 评测结果 WWWWWWWTTT
题目名称 零食店 最终得分 0
用户昵称 njx_07 运行时间 3.407 s
代码语言 C++ 内存使用 0.42 MiB
提交时间 2016-10-19 21:30:40
显示代码纯文本
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <string>
#include <cmath>
#include <ctime>
using namespace std;
inline int read()
{
	int x=0,f=1;char ch=getchar();
	while (ch>'9'||ch<'0')	{if (ch=='-'){f=-1;} ch=getchar();}
	while (ch<='9'&&ch>='0'){x=(x<<1)+(x<<3)+ch-'0';ch=getchar();}
	return x*f;
}
int n,m,q,st,c,d;
int point[200]={};
int dis[200]={};
int vis[200]={};
int use[200][200]={};
void init()
{
	n=read();m=read();q=read();
	for (int i=1;i<=n;i++)
		point[i]=read();
	memset(use,10,sizeof(use));
	int xx,yy,vv;
	for (int i=1;i<=m;i++)	{xx=read();yy=read();vv=read();use[xx][yy]=vv;use[yy][xx]=vv;}
}
void work()
{
	memset(dis,10,sizeof(dis));
	memset(vis,false,sizeof(vis));
	for (int i=1;i<=n;i++)	dis[i]=use[st][i];
	dis[st]=0;vis[st]=true;
	for (int i=1;i<n;i++)	{
		int minn=99999999,k=0;
		for (int j=1;j<=n;j++)	if (!vis[j]&&dis[j]<minn){minn=dis[j];k=j;}
		if (k==0)	break;
		vis[k]=true;
		if (point[i]<=c)for (int j=1;j<=n;j++)	if (dis[i]>dis[j]+minn)	{dis[i]=dis[j]+minn;}
	}
	int ans=0;
	for (int i=1;i<=n;i++)
		if (dis[i]<=d&&i!=st)	ans++;
	printf("%d\n",ans);
}
int main()
{
	freopen("snackstore.in","r",stdin);
	freopen("snackstore.out","w",stdout);
	init();
	for (int i=1;i<=q;i++)	{st=read();c=read();d=read();work();}
	
	return 0;
}