比赛 |
NOIP模拟赛by mzx Day1 |
评测结果 |
WWEEEEEEEE |
题目名称 |
零食店 |
最终得分 |
0 |
用户昵称 |
1azyReaper |
运行时间 |
1.073 s |
代码语言 |
C++ |
内存使用 |
0.55 MiB |
提交时间 |
2016-10-19 20:55:58 |
显示代码纯文本
#include <fstream>
#include <algorithm>
#include <cstdio>
#include <cstring>
#include <cmath>
#define maxn 111
#define max 20010
#define ppap 10000111
using namespace std;
ifstream fin("snackstore.in");
ofstream fout("snackstore.out");
/* run this program using the console pauser or add your own getch, system("pause") or input loop */
int m,n,q,head[110],vv[110]={0},ed=0,vis[110],x,y,l,c,s,d;
class node
{
public:
int next,to,val;
}e[max];
int add(int u,int v,int w)
{
e[++ed].next=head[u],head[u]=ed,e[ed].val=w,e[ed].to=v;
return 0;
}
int adde(int u,int v,int w)
{
add(u,v,w);
add(v,u,w);
return 0;
}
int dfs(int start,int ad)
{
vis[start]=1;
int abc=0;
for(int i=head[start];i;i=e[i].next)
{
if(!vis[e[i].to]&&ad+e[i].val<=d)
abc++;
if(vv[e[i].to]<=c)
abc+=dfs(e[i].to,ad+e[i].val);
}
return abc;
}
int main(int argc, char** argv)
{
fin>>n>>m>>q;
for(int i=1;i<=n;i++)
{
fin>>vv[i];
}
for(int i=1;i<=m;i++)
{
fin>>x>>y>>l;
adde(x,y,l);
}
for(int i=1;i<=q;i++)
{
fin>>s>>c>>d;
memset(vis,0,sizeof(vis));
fout<<dfs(s,0)<<endl;
}
fin.close();
fout.close();
return 0;
}