MLE求解答或调试
查看原帖
MLE求解答或调试
1288333
XURUIFAN楼主2024/9/16 22:10

如题
代码:

#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;
}

提交记录

2024/9/16 22:10
加载中...