比赛 |
NOIP模拟赛by mzx Day1 |
评测结果 |
AAAAWWWTTT |
题目名称 |
零食店 |
最终得分 |
40 |
用户昵称 |
丁司令 |
运行时间 |
3.118 s |
代码语言 |
C++ |
内存使用 |
0.40 MiB |
提交时间 |
2016-10-19 20:45:11 |
显示代码纯文本
#include<cstdio>
#include<iostream>
#include<cstring>
#define ll long long
using namespace std;
ll n,m,q,sum;
ll x1,y1,l,s,c,d;
int a[105][105],v[105],num[105],b[105][105],vis[105],wz[105][105];
void bfs(int s,int c,int d)
{
for(int i=1;i<=num[s];i++)
if(vis[b[s][i]]==0&&d-a[s][i]>=0)
{
//cout<<b[s][i]<<' ';
vis[b[s][i]]=1;
sum++;
if(v[b[s][i]]<=c) bfs(b[s][i],c,d-a[s][i]);
}
}
int main()
{
freopen("snackstore.in","r",stdin);
freopen("snackstore.out","w",stdout);
cin>>n>>m>>q;
for(int i=1;i<=n;i++)
scanf("%d",v+i);
for(int i=1;i<=m;i++)
{
scanf("%d%d%d",&x1,&y1,&l);
if(wz[x1][y1])
{
if(a[x1][wz[x1][y1]]>l)
a[x1][wz[x1][y1]]=l;
}
else
{a[x1][++num[x1]]=l;
b[x1][num[x1]]=y1;
wz[x1][y1]=num[x1];
}
if(wz[y1][x1])
{
if(a[y1][wz[y1][x1]]>l)
a[y1][wz[y1][x1]]=l;
}
else
{ a[y1][++num[y1]]=l;
b[y1][num[y1]]=x1;
wz[y1][x1]=num[y1];
}
}
for(int i=1;i<=q;i++)
{
memset(vis,0,sizeof(vis));
scanf("%d%d%d",&s,&c,&d);
vis[s]=1;
sum=0;
bfs(s,c,d);
printf("%lld\n",sum);
}
fclose(stdin);
fclose(stdout);
return 0;
}