比赛 NOIP模拟赛by mzx Day1 评测结果 AAAATTTTTT
题目名称 零食店 最终得分 40
用户昵称 gls1196 运行时间 6.015 s
代码语言 C++ 内存使用 0.55 MiB
提交时间 2016-10-19 20:37:29
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
#include<queue>
#include<ctime>
#include<cstdlib>
#include<stack>
#include<queue>
#include<cctype>
using namespace std;
typedef long long ll;
const int maxn=110;
int he[maxn],ed=0,n,m,qsum,cnt=0,vis[maxn];
ll val[maxn];
struct Edge{
	int v,nx;ll w;
	Edge(){
		v=nx=0;w=0LL;
	}
}e[maxn*maxn*2];
void Add(int u,int v,ll w){
	e[++ed].v=v;
	e[ed].w=w;
	e[ed].nx=he[u];
	he[u]=ed;
}
void Qread(int &x){
	char ch;x=0;
	while(ch=getchar(),!isdigit(ch)&&ch!='-');x=ch-48;
	while(ch=getchar(),isdigit(ch))x=10*x+ch-48;
}
ll c,d;int st;
void dfs(int x,int fa,ll w){
	vis[x]=cnt;
	if(val[x]>c&&x!=st)return;
	for(int i=he[x];i;i=e[i].nx){
		int v=e[i].v;
		if(v==fa||e[i].w+w>d)continue;
		dfs(v,x,e[i].w+w);
	}
}
int main(){
	freopen("snackstore.in","r",stdin);
	freopen("snackstore.out","w",stdout);
	scanf("%d%d%d",&n,&m,&qsum);int u,v,w;
	for(int i=1;i<=n;i++)scanf("%lld",&val[i]);
	while(m--){
		Qread(u),Qread(v),Qread(w);
		ll ww=(ll)w;
		Add(u,v,ww);Add(v,u,ww);
	}
	while(qsum--){
		Qread(st),Qread(v),Qread(w);
		c=(ll)v;d=(ll)w;int ans=0;
		++cnt;dfs(st,0,0);
		for(int i=1;i<=n;i++)
			if(i!=st)ans+=(vis[i]==cnt);
		printf("%d\n",ans);
	}return 0;
	//while(1);
}