记录编号 326540 评测结果 AAAAWWWTTT
题目名称 零食店 最终得分 40
用户昵称 GravatarMealy 是否通过 未通过
代码语言 C++ 运行时间 3.437 s
提交时间 2016-10-21 09:28:27 内存使用 0.64 MiB
显示代码纯文本
#include <iostream>
#include <cstdio>
#include <vector>
#include <queue>
#include <cstring>
using namespace std;


const int pomax=186;
const int nmax=20086;
const int INF=1<<29;


int n,m,q;
int tmpu,tmpv,tmplen;
int tmps,pmax,emax;
int cnt=0;


class edge
{
public:
	int from,to;
	int len;
};


int val[pomax]={0};
bool tag[pomax]={0};
int dis[nmax];
vector<edge> edges;
vector<int > G[nmax];


inline void PreDo()
{
	scanf("%d%d%d",&n,&m,&q);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&val[i]);
	}
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d%d",&tmpu,&tmpv,&tmplen);
		edges.push_back((edge){tmpu,tmpv,tmplen});
		G[tmpu].push_back(edges.size()-1);
		edges.push_back((edge){tmpv,tmpu,tmplen});
		G[tmpv].push_back(edges.size()-1);
	}
	
}


class T2
{
public:
	bool inqueue[nmax];
	queue<int > q;
	void SPFA(int tmps,int pmax,int emax)
	{
		cnt=0;
	 	for(int i=1;i<=n;i++)
		{
			dis[i]=INF;
		}
		dis[tmps]=0;
		memset(inqueue,0,sizeof(inqueue));
		q.push(tmps);
		inqueue[tmps]=1;
		while(!q.empty())
		{
			int tmpx=q.front();
			q.pop();
			inqueue[tmpx]=0;
			for(int i=0;i<G[tmpx].size();i++)
			{
				int tmpv=edges[G[tmpx][i]].to;
				if(dis[tmpv]>dis[tmpx]+edges[G[tmpx][i]].len)
				{
					dis[tmpv]=dis[tmpx]+edges[G[tmpx][i]].len;
					if(val[tmpv]<=pmax)
					{
						if(!inqueue[tmpv])
						{
							q.push(tmpv);
							inqueue[tmpv]=1;
						}
					}
				}		
			}
		}
	}
}FJ;


int main()
{
	freopen("snackstore.in","r",stdin);
	freopen("snackstore.out","w",stdout);
	PreDo();
	for(int x=1;x<=q;x++)
	{
		scanf("%d%d%d",&tmps,&pmax,&emax);
		FJ.SPFA(tmps,pmax,emax);
		for(int i=1;i<=n;i++)
		{
			if(dis[i]<=emax&&i!=tmps)
			{
				cnt++;
			}
		}
		printf("%d\n",cnt);
		cnt=0;
	}
	return 0;
}