比赛 |
NOIP模拟赛by mzx Day1 |
评测结果 |
WWWWWWTTTT |
题目名称 |
零食店 |
最终得分 |
0 |
用户昵称 |
Hzoi_chairman |
运行时间 |
5.506 s |
代码语言 |
C++ |
内存使用 |
0.34 MiB |
提交时间 |
2016-10-19 20:54:08 |
显示代码纯文本
#include<cstdlib>
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std;
int read()
{
int x,f=1;
char ch;
while(ch=getchar(),!isdigit(ch))if(ch=='-')f=-1;
x=ch-48;
while(ch=getchar(),isdigit(ch))x=x*10+ch-48;
return x*f;
}
void write(int x)
{
if(x<0)putchar('-'),x=-x;
int cnt=0;char ch[50];
while(ch[++cnt]=x%10+48,x/=10);
while(putchar(ch[cnt]),--cnt);
putchar('\n');
}
#define maxe 2000
#define maxn 200
struct edge
{
int t,n,d;
}a[maxe];
int len,head[maxn],flag[maxn],val[maxn];
void insert(int x,int y,int z)
{
a[++len].t=y;a[len].d=z;a[len].n=head[x];head[x]=len;
}
int x,d,c;
#define k a[i].t
int dfs(int x,int dis,int hua)
{
flag[x]=dis;int ans=0;
for(int i=head[x];i;i=a[i].n)
{
if(flag[k]>a[i].d+dis&&a[i].d+dis<=d&&min(hua,val[x])<c)
ans+=dfs(k,dis+a[i].d,min(hua,val[x]));
}
return ans+1;
}
int main()
{
freopen("snackstore.in","r",stdin);
freopen("snackstore.out","w",stdout);
int n=read(),m=read(),q=read();
for(int i=1;i<=n;i++)val[i]=read();
for(int i=1;i<=m;i++)
{
int x=read(),y=read(),z=read();
insert(x,y,z);
insert(y,x,z);
}
for(int i=1;i<=q;i++)
{
x=read();c=read();d=read();
memset(flag,0x7f,sizeof flag);
flag[x]=0;
int ans=0;
for(int i=head[x];i;i=a[i].n)
if(a[i].d<=d)ans+=dfs(x,a[i].d,val[k]);
write(ans);
}
// system("pause");
fclose(stdin);
fclose(stdout);
}