题目在这
Floyd算法模板题
AC如下
#include<bits/stdc++.h>
#define maxn 305
using namespace std;
const int INF = INT_MAX/100;
int d[maxn][maxn];
int n, m;
void init(){
cin>>n>>m;
for(int i = 1; i<= n; i++)
for(int j = 1; j <= n; j++)
d[i][j] = INF;
while(m--){
int num;
scanf("%d",&num);
vector<int>v;
int t;
for(int i = 0; i < num; i++){
scanf("%d",&t);
v.push_back(t);
for(int j = 0; j < i; j++){
d[v[i]][v[j]] = 1;
d[v[j]][v[i]] = 1;
}
}
}
}
void floyd()
{
for(int k = 1; k <= n; k++)
for(int i = 1; i <= n; i++)
for(int j = 1; j <= n; j++)
if(d[i][k] < INF && d[k][j] < INF)//防止溢出
d[i][j] = min(d[i][j], d[i][k] + d[k][j]);
}
int main()
{
init();
floyd();
double min = INT_MAX;
double sum;
for(int i = 1; i <= n; i++){
sum = 0;
for(int j = 1; j <= n; j++){
if(i != j)
sum += d[i][j];
}
sum /= (n - 1);
if(sum < min)
min = sum;
}
cout<<(int)(min * 100)<<endl;
return 0;
}