求从起点到终点最小边权的最大值。
Bellman-ford算法变形即可。
Bellman-fordBellman-fordBellman-ford d[e[j].to]=max(d[e[j].to],min(d[e[j].from],e[j].cost));
这句是核心。
另外注意司机也是一个人数这是个trick。。
#include <cstdio>
#include <cstring>
#include <iostream>
using namespace std;
struct Edge
{
int to,from,cost;
};
int main()
{
int N,R,kase=0;
while(scanf("%d%d",&N,&R)&&!(!N&&!R))
{
int n=0,u,v,w;
Edge e[20005];
for(int i=0; i<R; ++i)
{
scanf("%d%d%d",&u,&v,&w);
e[n].from=u;
e[n].to=v;
e[n++].cost=w;
e[n].from=v;
e[n].to=u;
e[n++].cost=w;
}
int S,T,M;
scanf("%d%d%d",&S,&T,&M);
int d[105]={0};
d[S]=10000000;
for(int i=0;i<N;++i)
for(int j=0;j<n;++j)
d[e[j].to]=max(d[e[j].to],min(d[e[j].from],e[j].cost));
d[T]--;
int ans=M/d[T];
if(M%d[T]) ans++;
printf("Scenario #%d\n",++kase);
printf("Minimum Number of Trips = %d\n\n",ans);
}
return 0;
}