比赛 NOIP模拟赛by mzx Day1 评测结果 WWWWWWWTTT
题目名称 零食店 最终得分 0
用户昵称 iortheir 运行时间 3.217 s
代码语言 C++ 内存使用 3.86 MiB
提交时间 2016-10-19 21:18:34
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<queue>

using namespace std;

const int INF = 987654321; 

const int maxn = 100 + 10;

const int maxm = 10000 + 10;

const int maxq = 1000000 + 10;

int n;
int m;
int q;

int x[maxm];
int y[maxm];
int l[maxm];

int s;
int c;
int d;

int val[maxn];

int ans[maxq];

int A[maxn][maxn];

int vis[maxn];
int dis[maxn];

int kount = 0;

inline int bfs(int x)
{
	queue<int >q;
	vis[x]=1;
	dis[x]=0;
	q.push(x);
	while(!q.empty())
	{
		int t = q.front();
		q.pop();
		for(int h=1;h<=n;h++)
		{
			if(!vis[h]&&A[t][h]!=INF)
			{
				vis[h]=1;
				q.push(h);
				dis[h]=dis[t]+A[t][h];
				kount++;
				if(dis[h]>d)
				{
					return 0;
				}
			}
		}
	}
	cout<<kount;
}

int main()
{
	freopen("snackstore.in","r",stdin);
	freopen("snackstore.out","w",stdout);
	scanf("%d%d%d",&n,&m,&q);
	for(int i=1;i<=n;i++)
	{
		scanf("%d",&val[i]);
	}
	for(int i=1;i<=n;i++)
	{
		for(int j=1;j<=n;j++)
		{
			A[i][j] = INF;
		}
	}
	for(int i=1;i<=m;i++)
	{
		scanf("%d%d%d",&x[i],&y[i],&l[i]);
		A[x[i]][y[i]] = l[i];
		A[y[i]][x[i]] = l[i];
		for(int j=1;j<=m;j++)
		{
			if(i!=j&&x[i]==x[j]&&y[i]==y[j])
			{
				if(l[i]<l[j])
				{
					A[x[i]][y[i]] = l[i];
				}
				else
				{
					A[x[i]][y[i]] = l[j];
				}
			}
		}
	}
	for(int i=1;i<=q;i++)
	{
		scanf("%d%d%d",&s,&c,&d);
		for(int j=1;j<=n;j++)
		{
			if(val[j]>c)
			{
				for(int k=1;k<=n;k++)
				{
					A[j][k] = INF;
				}
			}
		}
		bfs(s);
		//cout<<kount;
	}
	return 0;
}