#include
#include
using namespace std;
#define inf 0x3f3f3f3f
int map[1001][1001],dis[1001],vis[1001];
int n,m;
void init()
{
memset(map,inf,sizeof(map));
cin>>n>>m;
for(int i=1;i<=n;i++)
{
map[i][i]=0;
}
while(m--)
{
int x,y;
cin>>x>>y;
map[x][y]=map[y][x]=1;
}
}
//更新vis
void Prim(int root)
{
for(int i=1;i<=n;i++)
dis[i]=map[root][i];
vis[root]=1;
int min,pos,t=n;
while(t--)
{
min=inf,pos=-1;
for(int i=1;i<=n;i++)
{
if(!vis[i]&&dis[i]<min)
{
min=dis[i];
pos=i;
}
}
if(pos==-1) break;
vis[pos]=1;
for(int i=1;i<=n;i++)
{
if(!vis[i]&&dis[pos]+map[pos][i]<dis[i])
{
dis[i]=dis[pos]+map[pos][i];
}
}
}
}
int main()
{
init();
int N;
cin>>N;
int a[N],tmp;
for(int i=0;i<N;i++)
{
cin>>tmp;
memset(vis,0,sizeof(vis));
Prim(tmp);
float sum=0;
for(int j=1;j<=n;j++)
{
sum+=dis[j];
}
printf("Cc(%d)=%.2f\n",tmp,(n-1)/sum);
}
}
这道题不要被题目中的10000骗了,在声明数组时设为1001就可以,否则会内存超限