比赛 |
NOIP模拟赛by mzx Day1 |
评测结果 |
WWWWWWWTTT |
题目名称 |
零食店 |
最终得分 |
0 |
用户昵称 |
TZJ |
运行时间 |
3.478 s |
代码语言 |
C++ |
内存使用 |
1.31 MiB |
提交时间 |
2016-10-19 21:04:38 |
显示代码纯文本
#include<iostream>
#include<cstring>
#include<cstdio>
#include<cmath>
#include<iomanip>
using namespace std;
int a[510][510],b[510],add;
bool c[510],checkk[510];
bool check;
int n,m,q,anss;
int str,pay,way;
using namespace std;
void work(int now,int tire,int ans,int times)
{
check=false;
for(int i=1;i<=n;i++)
{
if((i!=now)&&(a[now][i]<=tire)&&(b[i]<=pay)&&(c[i]==false))
{
c[i]=true;
check=true;
if(checkk[now]==true) work(i,tire-a[now][i],ans+1,times+1);
else work(i,tire-a[now][i],ans+1,times+1);
//c[i]=false;
check=false;
checkk[now]=true;
}
if((i!=now)&&(a[now][i]<=tire)&&(b[i]>pay)&&(c[i]==false))
{
anss+=ans+1;
//return;
}
}
if(now==str) return;
if(check==false)
{
anss+=ans-times+1;
return;
}
}
int main()
{
freopen("snackstore.in","r",stdin);
freopen("snackstore.out","w",stdout);
scanf("%d%d%d",&n,&m,&q);
memset(a,10,sizeof(a));
for(int i=1;i<=n;i++) scanf("%d",&b[i]);
for(int i=1;i<=m;i++)
{
int x,y,l;
scanf("%d%d%d",&x,&y,&l);
a[x][y]=l;
a[y][x]=l;
}
for(int i=1;i<=q;i++)
{
anss=0;
scanf("%d%d%d",&str,&pay,&way);
c[str]=true;
work(str,way,0,0);
memset(c,false,sizeof(c));
cout<<anss<<endl;
}
return 0;
}