首先这道题不得不让我吐槽下,测试数据太无语了,在输入列和行后,后面竟然还会输空格,所以不能用getchar()去处理'\n',只能用gets(),这样一次性就可以处理掉空格和'\n'。
然后再说说本题的思想吧,我是先对每个A或S用一次BFS,求出它与其它的A或S的最短距离,然后再以这些A或S建图,求一次最小生成树,然后把所有的边权相加
[cpp]
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
struct st
{
int x,y,step;
}w,tmp;
st q[2505];
const int INF=100000000;
int map[55][55];
bool visit[55][55];
bool visit1[105];
int dist[105][105];
int dirt ={0,1,0,-1,1,0,-1,0};
int d[105];
int t,n,m,num;