标签:com targe 不能 c++ show img define 结构 lin
多组测试数据,第一行一个整数T,表示测试数据数量,1<=T<=5
每组测试数据有相同的结构构成。
每组数据的第一行两个整数N,d,表示人数与朋友间存款差的最大值,其中2<=N<=50,0<=d<=1000.
接下来有一个N*N的数组A,若A[i][j]=‘Y‘表示i与j两个人是朋友,否则A[i][j]=‘N‘表示不是朋友。其中A[i][i]=‘N‘,且保证
A[i][j]=A[j][i].
每组数据一行输出,即这个国家的贫富差距最大值的下界,如果这个值为无穷大输出-1.
3
3 10
NYN
YNY
NYN
2 1
NN
NN
6 1000
NNYNNN
NNYNNN
YYNYNN
NNYNYY
NNNYNN
NNNYNN
20
-1
3000
//容易想到,看做一个01图的话,有两个及以上连通块就是 -1,然后求出连通块内最远距离即可
1 #include <bits/stdc++.h> 2 using namespace std; 3 #define INF 0x3f3f3f3f 4 #define LL long long 5 #define MOD 1000000007 6 #define MX 55 7 8 int n, d; 9 char str[MX]; 10 int G[MX][MX]; 11 12 int main() 13 { 14 int T; 15 scanf("%d",&T); 16 while (T--) 17 { 18 scanf("%d%d",&n,&d); 19 memset(G,0x3f,sizeof(G)); 20 for (int i=1;i<=n;i++) 21 { 22 scanf("%s",str+1); 23 for (int j=1;j<=n;j++) 24 { 25 if (str[j]==‘Y‘) 26 G[i][j] = 1; 27 else 28 G[i][j] = INF; 29 } 30 } 31 for (int k=1;k<=n;k++) 32 for (int i=1;i<=n;i++) 33 for (int j=1;j<=n;j++) 34 G[i][j] = min(G[i][j],G[i][k]+G[k][j]); 35 int mmm=0, ok=1; 36 for (int i=1;i<=n;i++) 37 { 38 for (int j=i+1;j<=n;j++) 39 { 40 if (G[i][j]==INF) 41 ok=0; 42 mmm = max(mmm,G[i][j]); 43 } 44 } 45 if (ok) 46 printf("%d\n",mmm*d); 47 else 48 printf("-1\n"); 49 50 } 51 return 0; 52 }
标签:com targe 不能 c++ show img define 结构 lin
原文地址:http://www.cnblogs.com/haoabcd2010/p/7608762.html