https://www.matiji.net/exam/brushquestion/1/4347/179CE77A7B772D15A8C00DD8198AAC74
题意:
A, B都要去N点, 初始位置分别是t, f;每移动一个位置所消耗的能量是x,y;如果俩人在相同的位置去相同的方向移动的话消耗的总能量可以减少s; 求俩人到n点消耗的总能量
bfs搜索n点到其他点的所有距离, 以及t,f到其他点的所有距离, 求最小即可
const int N = 4e4 + 10;
vector<int>v[N];
int tt[N], ff[N], nn[N], g[N];
void bfs(int st, int times, int ar[])
{
queue<int>q;
q.push(st);
g[st] ++;
while(q.size())
{
int h = q.front();
q.pop();
for(auto x : v[h])
{
if(g[x] == times) continue;
g[x] ++;
ar[x] = ar[h] + 1;
q.push(x);
}
}
}
int main()
{
int x, y, l; cin >> x >> y >> l;
int z = x + y - l;
int t, f, n, m; cin >> t >> f >> n >> m;
for(int i = 0; i < m; i ++)
{
int a, b; cin >> a >> b;
v[a].push_back(b);
v[b].push_back(a);
}
bfs(n, 1, nn);
if(!g[t] || !g[f])
{
cout << "-1" << endl;
return 0;
}
bfs(t, 2, tt);
bfs(f, 3, ff);
int ans = 1e9;
for(int i = 1; i <= n; i ++)
if(g[i])
ans = min(ans, tt[i] * x + ff[i] * y + nn[i] * z);
cout << ans << endl;
return 0;
}