比赛 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;
}