比赛 |
NOIP模拟赛by mzx Day1 |
评测结果 |
AAAATTTTTT |
题目名称 |
零食店 |
最终得分 |
40 |
用户昵称 |
destiny |
运行时间 |
6.006 s |
代码语言 |
C++ |
内存使用 |
0.87 MiB |
提交时间 |
2016-10-19 21:46:15 |
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define LL long long
const int maxn=110;
struct Edge
{
LL next,to,dis;
}e[maxn*maxn*2];
LL head[maxn],v[maxn],len,m,n,q,mv,mdis,tot;
bool flag[maxn];
void Insert(LL,LL,LL);
void Dfs(LL,LL,LL);
int main()
{
freopen("snackstore.in","r",stdin);
freopen("snackstore.out","w",stdout);
memset(head,-1,sizeof(head));
scanf("%lld%lld%lld",&n,&m,&q);
for(int i=1;i<=n;i++)scanf("%lld",&v[i]);
for(int i=1;i<=m;i++)
{
LL x,y,z;scanf("%lld%lld%lld",&x,&y,&z);
Insert(x,y,z);Insert(y,x,z);
}
for(int i=1;i<=q;i++)
{
memset(flag,0,sizeof(flag));tot=0;
LL st;scanf("%lld%lld%lld",&st,&mv,&mdis);
Dfs(st,0,0);LL ans=0;
for(int i=1;i<=n;i++)if(flag[i])ans++;
printf("%lld\n",ans-1);
}
fclose(stdin);
fclose(stdout);
//system("pause");
return 0;
}
void Insert(LL x,LL y,LL z)
{
len++;e[len].to=y;e[len].next=head[x];
head[x]=len;e[len].dis=z;
}
void Dfs(LL x,LL a,LL b)
{
if(a>mv||b>mdis)return;
if(tot==n)return;
if(!flag[x]){flag[x]=1;tot++;}//printf("%d\n",x);//system("pause");
for(int i=head[x];i!=-1;i=e[i].next)
{
int j=e[i].to;
if(e[i].dis+b<=mdis)
{
if(v[j]<=mv)Dfs(j,max(a,v[j]),e[i].dis+b);
else
{
if(!flag[j])tot++;
flag[j]=1;
}
}
}
}
/*
5 5 2
1 2 3 4 5
1 2 1
1 3 4
2 3 2
1 4 3
2 5 1
1 3 5
*/