比赛 NOIP模拟赛by mzx Day1 评测结果 AWWAWWWTTT
题目名称 零食店 最终得分 20
用户昵称 Earl_WR 运行时间 3.189 s
代码语言 C++ 内存使用 0.32 MiB
提交时间 2016-10-19 20:42:37
显示代码纯文本
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
using namespace std;
int map[110][110];
int n,m,q,s,c,d;
int cost[110];
int t=0,maxx=-1;
bool flag[110];
int read()
{
	int x=0,f=1;char ch=getchar();
	while (ch<'0' || ch>'9'){if (ch=='-')f=-1;ch=getchar();}
	while (ch>='0' && ch<='9'){x=x*10+ch-'0';ch=getchar();}
	return x*f;
}
void in()
{
	freopen ("snackstore.in","r",stdin);
	freopen ("snackstore.out","w",stdout);
	ios::sync_with_stdio(false);
	memset(map,10,sizeof(map));
	memset(cost,10,sizeof(cost));
	for (int i=1;i<=n;i++)
	{
		map[i][i]=0;
	}
	n=read();m=read();q=read();
	for (int i=1;i<=n;i++)
	{
		cost[i]=read();
	}
	for (int i=1;i<=m;i++)
	{
		int x,y,dis;
		x=read();y=read();dis=read();
		if (map[x][y]>dis)
		{
			map[y][x]=dis;
			map[x][y]=dis;
		}
	}
}
void dfs(int k,int co,int di)
{
	for (int i=1;i<=n;i++)
	{
		if (map[k][i]>di)
		{
			continue;
		}
		if (map[k][i]<=di && cost[i]>co && !flag[i])
		{
			flag[i]=true;
			t++;
			if (t>maxx)
				maxx=t;
			continue;
		}
		if (map[k][i]<=di && cost[i]<=co && !flag[i])
		{
			flag[i]=true;
			t++;
			di-=map[k][i];
			if (t>maxx)
				maxx=t;
			dfs(i,co,di);
		}
	}
}
int main()
{
	in();
	for (int i=1;i<=q;i++)
	{
		maxx=-1;
		memset(flag,0,sizeof(flag));
		t=0;
		s=read();c=read();d=read();
		dfs(s,c,d);
		if (maxx==n)
			maxx--;
		cout<<maxx<<endl;
	}
	return 0;
}