使用FLOYD算法得了80分,可以在源程序基础上加以优化吗?
查看原帖
使用FLOYD算法得了80分,可以在源程序基础上加以优化吗?
1050776
peterJr楼主2024/9/26 21:15

怎么写了Floyd都能骗80
有用Dijkstra/SPFA/Bellman-Ford等低于O(N2logN)O(N^2 \log N) 在我的代码基础上进行修改的吗?

#include <bits/stdc++.h>

#define N 3007

using namespace std;

int n, m, x, y, s1, t1, s2, t2, f[N][N], ans = -1, tot;

int main()
{
	memset(f, 0x3f, sizeof(f));
	
	cin >> n >> m;
	for (int i = 1; i <= m; ++i)
	{
		cin >> x >> y;
		
		f[x][y] = 1;
		f[y][x] = 1;
		tot++;
	}
	cin >> s1 >> t1 >> s2 >> t2;
	
	for (int i = 1; i <= n; ++i)
		f[i][i] = 0;
	
	for (int k = 1; k <= n; ++k)
		for (int i = 1; i <= n; ++i)
			for (int j = 1; j <= n; ++j)
				f[i][j] = min(f[i][k] + f[k][j], f[i][j]);
	
	for (int i = 1; i <= n; ++i)
		if (f[1][i] + f[i][s1] <= t1 && f[1][i] + f[i][s2] <= t2)
		{
			ans = max(ans, tot - f[1][i] - f[i][s1] - f[i][s2]);
		}
	
	cout << ans << endl;
	
	return 0;
}
2024/9/26 21:15
加载中...