比赛 20101116 评测结果 AATTTEEEEA
题目名称 城市 最终得分 30
用户昵称 Citron酱 运行时间 0.000 s
代码语言 C++ 内存使用 0.00 MiB
提交时间 2010-11-16 10:20:20
显示代码纯文本
#include <fstream>

#define I_F "cost.in"
#define O_F "cost.out"
#define MAX 200
#define MQX 1000000001

using namespace std;

long map[MAX][MAX];
bool f[MAX]={false};
long c[MAX];
int n,u,v;
long s,ans=MQX;

void Input();
void Dfs(int x,long cn,long maxn);
void Output();

int main()
{
	Input();
	Dfs(u,0,c[u]);
	Output();
	return 0;
}

void Input()
{
	ifstream fin(I_F);
	long m,i,t;
	int x,y;
	fin>>n>>m>>u>>v>>s;
	u--;
	v--;
	for (i=0; i<n; fin>>c[i++]);
	for (i=0; i<m; i++)
	{
		fin>>x>>y>>t;
		x--;
		y--;
		if ((t<map[x][y])or(map[x][y]==0))
		{
			map[x][y]=t;
			map[y][x]=t;
		}
	}
	fin.close();
	f[u]=true;
}

void Dfs(int x,long cn,long maxn)
{
	if (x!=v)
	{
		int i;
		for (i=0; i<n; i++)
			if ((!f[i])&&(map[x][i]>0)&&(c[i]<ans)&&(cn+map[x][i]<=s))
			{
				f[i]=true;
				Dfs(i,cn+map[x][i],max(maxn,c[i]));
				f[i]=false;
			}
	}
	else
		ans=maxn;
}

void Output()
{
	ofstream fout(O_F);
	if (ans==MQX)
		fout<<"-1\n";
	else
		fout<<ans<<'\n';
	fout.close();
}