如题
代码:
#include<bits/stdc++.h>
using namespace std;
int n, m, ans;
struct Egde {
int to, next;
} edges[6010];
int nodes[3010], s1, s2, t1, t2, edges_num;
void add_edge(int u, int v) {
edges[++edges_num].to = v;
edges[edges_num].next = nodes[u];
nodes[u] = edges_num;
}
int dis[3][3000];
void bfs (int from, int *d) {
queue <int> q;
q.push(from);
d[from] = 1;
while (!q.empty()) {
int now = q.front();
q.pop();
for (Egde i = edges[nodes[now]]; i.to; i = edges[i.to]) {
if (d[now] + 1 < d[i.to]) {
d[i.to] = d[now + 1];
q.push(i.to);
}
}
}
}
int main() {
// ios::sync_with_stdio(0);
// cin.tie(0), cout.tie(0);
cin >> n >> m;
// cout << "first line OK" << "\n";
for (int i = 0; i < m; i++) {
int x, y;
cin >> x >> y;
add_edge(x, y);
add_edge(y, x);
}
// cout << "last m-lines OK" << "\n";
cin >> s1 >> t1 >> s2 >> t2;
// cout << "last line OK" << "\n";
ans = m + 1;
memset(dis, 0x2a, sizeof(dis));
bfs(1, dis[0]);
bfs(s1, dis[1]);
bfs(s2, dis[2]);
for (int i = 1; i <= n; i++) ans = min(ans, dis[0][i] + dis[1][i] + dis[2][i]);
cout << m - ans;
return 0;
}