比赛 NOIP模拟赛by mzx Day1 评测结果 AAAAAAATTT
题目名称 零食店 最终得分 70
用户昵称 NVIDIA 运行时间 4.048 s
代码语言 C++ 内存使用 0.32 MiB
提交时间 2016-10-19 21:58:23
显示代码纯文本
/*思路来源MINT神犇*/
#include<bits/stdc++.h>
#define maxn 200
#define INF 0x7ffffff
using namespace std;
vector<int> G[maxn], C[maxn];
int va[maxn],n,m,q;
inline int read()
{
    int x=0,f=1;char ch=getchar();
    while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
    return x*f;
}
inline void predo()
{
for(int i=1;i<=n;i++)va[i]=read();
}
inline void tu()
{
	for(int i=1;i<=m;i++)
	{
		int u,v,w;
		u=read();v=read();w=read();
		G[u].push_back(v);
		C[u].push_back(w);
		G[v].push_back(u);
		C[v].push_back(w);
	}
}
inline void BFS(int s,int c,int d)
{
	queue<int> Q;
	bool que[maxn],vis[maxn];
	memset(que,0,sizeof(que));
	memset(vis,0,sizeof(vis));
	int dis[maxn],SUM=0;
	for(int i=1;i<=n;i++)dis[i]=INF;
	dis[s] = 0;
	Q.push(s);
	que[s]=1;
	while(!Q.empty())
	{
		int now = Q.front();
		Q.pop();
		que[now]=0;
		for(int i=0;i<G[now].size();i++)
		{
			int v=G[now][i],w =C[now][i];
			if(dis[v]>dis[now]+w)
			{
				dis[v] = dis[now]+w;
				if(dis[v]<=d&&vis[v]==false)
				{
					vis[v] = true;
					SUM++;
				}
				if(va[v]>c)continue ;
				if(!que[v])
				{
					que[v]=1;
					Q.push(v);
				}
			}
		}
	}
	cout<<SUM<<endl;
	return ;
}
int main()
{
 
	freopen("snackstore.in", "r", stdin);
	freopen("snackstore.out", "w", stdout);
	n=read();m=read();q=read();
	predo();
	tu();
    while(q--)
	{
		int s,c,d;
		cin>>s>>c>>d;
		BFS(s,c,d);
	}
	return 0;
}