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