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