这个代码提交只有9分(剩下测试点要么TLE要么MLE),但不知道问题出在哪里。
#include<bits/stdc++.h>
using namespace std;
typedef pair<int,int> pii;
const int N = 4e4+1;
int B, E, P, n, m, x, y;
bool vis[N];
vector<int> e[N];
int d[3][N];
queue<int> q;
void bfs(int s, int id){
memset(vis, 0, sizeof vis);
d[id][s] = 0;
q.push(s);
while(!q.empty()){
int u = q.front();
q.pop();
vis[u] = 1;
for(auto v:e[u])
if (!vis[v]){
d[id][v] = d[id][u] + 1;
q.push(v);
}
}
}
int main(){
memset(d, 0x3f, sizeof d);
cin>>B>>E>>P>>n>>m;
while(m--){
cin>>x>>y;
e[x].push_back(y);
e[y].push_back(x);
}
bfs(1,0);
bfs(2,1);
bfs(n,2);
int ans = 2147483647;
for (int i=1;i<=n;i++){
ans = min(ans, B*d[0][i] + E*d[1][i] + P*d[2][i]);
}
cout<<ans;
}