原题地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=1248
题意求一个点到另一个点危险度最小值,注意不是求和。用Floyed求最短路径算法。
#include<stdio.h>
#define MAX 9999
int max(int x,int y)
{
return x>y?x:y;
}
int min(int x,int y)
{
return x<y?x:y;
}
int main()
{
int n,m,u,v,x,map[110][110],i,j,k,q,a,b;
scanf("%d%d",&n,&m);
for(i=0;i<=n;i++)
for(j=0;j<=n;j++)
{
if(i==j)
map[i][j]=0;
else
map[i][j]=MAX;
}
for(i=0;i<m;i++)
{
scanf("%d%d%d",&u,&v,&x);
if(x<map[u][v])
{
map[u][v]=x;
map[v][u]=x;
}
}
for(k=1;k<=n;k++)
for(i=1;i<=n;i++)
for(j=1;j<=n;j++)
{
if(map[i][k]!=MAX&&map[k][j]!=MAX)
{
int big=max(map[i][k],map[k][j]);
map[i][j]=min(map[i][j],big);
}
}
scanf("%d",&q);
for(i=0;i<q;i++)
{
scanf("%d%d",&a,&b);
if(map[a][b]==MAX)
printf("%d\n",-1);
else
printf("%d\n",map[a][b]);
}
return 0;
}