比赛 2024国庆练习1 评测结果 AAAAAAAEEE
题目名称 零食店 最终得分 70
用户昵称 健康铀 运行时间 1.103 s
代码语言 C++ 内存使用 3.43 MiB
提交时间 2024-10-04 15:53:39
显示代码纯文本
#include<bits/stdc++.h>
using namespace std;
int n,m,tot,q,a[10010],b[10010],r[10010],rt,d[10010],v[10100],ans,c,vis[10010],he[10010];
struct node{
	int v;
	int nx;
	int z;
}e[10010];
void add(int x,int y,int z){
    e[++tot].v=y,e[tot].nx=he[x],e[tot].z=z,he[x]=tot;
}
int main(){
	freopen("snackstore.in","r",stdin);
	freopen("snackstore.out","w",stdout);
    cin>>n>>m>>q;
    for(int i=1;i<=n;i++){
    	cin>>v[i];
	}
	for(int i=1;i<=m;i++){
		int x,y,z;
		cin>>x>>y>>z;
		add(x,y,z);
		add(y,x,z);
	}
	while(q--){
		int k1,d1;
		cin>>k1>>c>>d1;
		memset(d,100,sizeof(d));
        memset(vis,0,sizeof(vis));
        queue <int> a;
        a.push(k1),vis[k1]=1,d[k1]=0;
        while(!a.empty()){
            int x=a.front();
            a.pop();
            vis[x]=0;
            for(int i=he[x];i;i=e[i].nx){
                int y=e[i].v;
                int z=e[i].z;
                if(d[x]+z<d[y]){
                    d[y]=d[x]+z;
                    if(!vis[y]&&v[y]<=c)vis[y]=1,a.push(y);
                }
            }
       }
       ans=0;
       for(int i=1;i<=n;i++){
       	if(d[i]<=d1&&i!=k1)
       	    ans++;
	   }
	   cout<<ans<<endl;
	}
	return 0;
}