您的位置:首页 > 其它

UVA 10099 最大的最小边。。

2011-04-19 23:11 267 查看
题目连接: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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: