题目连接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem&category=12&problem=1040&mosmsg=Submission+received+with+ID+8760564 这个题很YD,之前一直不知道导游还要占一个容量,所以连样例都搞不懂。。悲催。。 解法是利用floyd算法,最后求出那条边之后再做一下出发就OK了 我的代码: #include<stdio.h> #include<algorithm> #include<string.h> 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; }