如下代码连样例都无法通过,却能 AC:
#include<iostream>
#include<vector>
#include<queue>
#include<cstring>
const int N = 3e4 + 5;
int n, m, s1, s2, t1, t2;
std::vector<int> g[N];
int dis_A[N], dis_s1[N], dis_s2[N];
void bfs(int x, int dis[]){
memset(dis, 0x3f, sizeof dis_A);
dis[x] = 0;
std::queue<int> q;
q.push(x);
while(!q.empty()){
int u = q.front(); q.pop();
for(int i = 0; i < g[u].size(); ++i){
int v = g[u][i];
if(dis[v] == 0x3f3f3f3f){
dis[v] = dis[u] + 1;
q.push(v);
}
}
}
}
int main(){
// freopen("road.in", "r", stdin);
// freopen("road.out", "w", stdout);
std::ios::sync_with_stdio(false);
std::cin.tie(0); std::cout.tie(0);
std::cin >> n >> m;
for(int i = 1; i <= m; ++i){
int x, y;
std::cin >> x >> y;
g[x].push_back(y);
g[y].push_back(x);
}
std::cin >> s1 >> t1 >> s2 >> t2;
bfs(1, dis_A); bfs(s1, dis_s1); bfs(s2, dis_s2);
int ans = m + 1;
for(int i = 1; i <= n; ++i){
if(dis_A[i] + dis_s1[i] <= t1 && dis_A[i] + dis_s1[i] <= t2)
ans = std::min(ans, dis_A[i] + dis_s1[i] + dis_s2[i]);
}
std::cout << m - ans;
return 0;
}