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