比赛 |
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);
}