比赛 20111110 评测结果 WEEEETWAWW
题目名称 城市 最终得分 10
用户昵称 苏轼 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2011-11-10 11:10:54
显示代码纯文本
#include<iostream>
#include<cstdio>
#include<cstdlib>
using namespace std;
int n,m,qi1,mo1,s,qi=0,mo=0,answer=-1;
int w[10001],a[10001][3];
struct hehe
{
	int father,you,weizhi,max;
}q[1000000];
void bfs(int x);
int main()
{
	freopen ("cost.in","r",stdin);
	freopen ("cost.out","w",stdout);
	scanf("%d%d%d%d%d\n",&n,&m,&qi1,&mo1,&s);
	q[0].father=-1;
	q[0].you=s;
	q[0].weizhi=qi1;
	q[0].max=0;
	for (int p=1;p<=n;p++)
	{
		scanf("%d\n",&w[p]);
	}
	for (int p=1;p<=m;p++)
	{
		scanf("%d%d%d\n",&a[p][0],&a[p][1],&a[p][2]);
	}
	while (qi<=mo)
	{
		bfs(qi);
		qi++;
		if (qi>2000000)
		{
			break;
		}
	}
	cout<<answer;
	return 0;
}
void bfs(int x)
{
	for (int i=1;i<=m;i++)
	{
		int c,d,fee;
		c=a[i][0];
		d=a[i][1];
		fee=a[i][2];
		if (c==q[x].weizhi&&d!=q[x].father&&q[x].you-fee>=0)
		{
			if (d==mo1)
			{
				if (answer==-1)
				{
					answer=q[x].max;
				}
				else
				{
					if (q[x].max<answer)
					{
						answer=q[x].max;
					}
				}
				return;
			}
			mo++;
			q[mo].you=q[x].you-fee;
			q[mo].weizhi=d;
			q[mo].father=c;
			if (w[d]>q[x].max||q[x].max==0)
			{
				q[mo].max=w[d];
			}
			else
			{
				q[mo].max=q[x].max;
				
			}
		}
		if (d==q[x].weizhi&&c!=q[x].father&&q[x].you-fee>=0)
		{
			if (c==mo1)
			{
				if (answer==-1)
				{
					answer=q[x].max;
				}
				else
				{
					if (q[x].max<answer)
					{
						answer=q[x].max;
					}
				}
				return;
			}
			mo++;
			q[mo].you=q[x].you-fee;
			q[mo].weizhi=c;
			q[mo].father=d;
			if (w[c]>q[x].max||q[x].max==0)
			{
				q[mo].max=w[c];
			}
			else
			{
				q[mo].max=q[x].max;
			}
		}
	}
}