51nod 1366 贫富差距(最短路)

来源:互联网 发布:三角木马淘宝 编辑:程序博客网 时间:2024/05/29 06:50

数据这么小,floyd暴力水过
求出任意两点间最短路,找最大的最短路。

#include <bits/stdc++.h>using namespace std;const int INF = 550;const int MAXN = 55;int G[55][55];int main(){    int T,n,d;    char ch;    scanf("%d",&T);    while(T--)    {        scanf("%d %d",&n,&d);        for(int i = 0; i < n; ++i)        {            for(int j = 0; j < n; ++j)            {                scanf(" %c",&ch);                if(i == j)                {                    G[i][j] = 0;                    continue;                }                if(ch == 'Y') G[i][j] = 1;                else G[i][j] = INF;            }        }        for(int k = 0; k < n; ++k)        {            for(int i = 0; i < n; ++i)            {                for(int j = 0; j < n; ++j)                {                    if(G[i][k]+G[k][j] < G[i][j])                        G[i][j] = G[i][k]+G[k][j];                }            }        }        bool flag = false;        int res = 0;        for(int i = 0; i < n; ++i)        {            for(int j = i+1; j < n; ++j)            {                if(G[i][j] == INF)                {                    flag = true;                    break;                }                res = max(res,G[i][j]);            }            if(flag)            {                break;            }        }        if(flag)        {            puts("-1");        }        else            printf("%d\n",res*d);    }    return 0;}