UVA 10048

题意:给出一张n个点,m条带正权的双向边,现在有q次询问,每次询问要你求出给出的两个点间最小的可行路中最大边权值(有点绕);

分析:数据较小,直接Floyd,对于每次dp,两点间要么是原来的权短,要么是另外两条路的最大边权短,那么有 g[j][k]=g[k][j]=min(g[j][k],max(g[i][j],g[i][k]));暴力跑过。


#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

using namespace std;

#define INF 0x3f3f3f3f

int g[105][105];

int main()
{
    int n,m,q;
    int c=1;
    int ok=1;
    while(scanf("%d%d%d",&n,&m,&q)!=EOF)
    {
        if(n==0&&m==0&&q==0) break;
        if(!ok) printf("\n");
        ok=0;
        memset(g,0x3f,sizeof g);
        for(int i=0; i


你可能感兴趣的:(===图论===)