这个题很YD,之前一直不知道导游还要占一个容量,所以连样例都搞不懂。。悲催。。
解法是利用floyd算法,最后求出那条边之后再做一下出发就OK了
我的代码:
using namespace std;
int n,m;
int dis[105][105];
int max(int a,int b)
{
if(a>b)
return a;
else
return b;
}
int min(int a,int b)
{
if(a>b)
return b;
else
return a;
}
int main()
{
int i,j,a,b,c,k,t=1;
int start,end,people;
while(scanf("%d%d",&n,&m)!=EOF)
{
if(n==0&&m==0)
break;
memset(dis,0,sizeof(dis));
for(i=1;i<=m;i++)
{
scanf("%d%d%d",&a,&b,&c);
dis[a][b]=c;
dis[b][a]=c;
}
scanf("%d%d%d",&start,&end,&people);
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
dis[i][j]=max(dis[i][j],min(dis[i][k],dis[k][j]));
int temp=dis[start][end];
printf("Scenario #%d/n",t++);
if(people%(temp-1))
printf("Minimum Number of Trips = %d/n",people/(temp-1)+1);
else
printf("Minimum Number of Trips = %d/n",people/(temp-1));
printf("/n");
}
return 0;
}