全部评论 3

  • #include<bits/stdc++.h>
    using namespace std;
    const int N = 110;
    int n, m;
    int g[N][N];
    int f[N][N];
    void init() {
    	for (int i = 1; i <= n; i++)
    		for (int j = 1; j <= n; j++)
    			g[i][j] = f[i][j];
    }//重新赋值
    int main() {
    	cin >> n >> m;
    	memset(g, 0x3f, sizeof g);
    	while (m--) {
    		int a, b, w;
    		cin >> a >> b >> w;
    		g[a][b] = g[b][a] = w;
    	}
    	for (int k = 1; k <= n; k++)
    		for (int i = 1; i <= n; i++)
    			for (int j = 1; j <= n; j++) {
    				g[i][j] = min(g[i][j], g[i][k] + g[k][j]);
    				f[i][j] = g[i][j];
    			}//先做一遍floyd
    	int ans = 2e9; //赋值很大的一个数
    	for (int i = 1; i <= n; i++)
    		for (int j = 1; j < i; j++) {
    			g[i][j] = g[j][i] = 0;
    			for (int k1 = 1; k1 <= n; k1++)
    				for (int k2 = 1; k2 <= n; k2++)
    					g[k1][k2] = min(g[k1][k2], g[k1][i] + g[i][k2]);
    			for (int k1 = 1; k1 <= n; k1++)
    				for (int k2 = 1; k2 <= n; k2++)
    					g[k1][k2] = min(g[k1][k2], g[k1][j] + g[j][k2]);
    //做floyd
    			int res = 0;
    			for (int k1 = 1; k1 <= n; k1++)
    				for (int k2 = 1; k2 < k1; k2++)
    					res += g[k1][k2]; //求和
    			ans = min(ans, res);
    			init();
    		}
    	cout << ans;
    	return 0;
    }
    
    
    

    2024-08-15 来自 浙江

    3
  • Yuilice牢失太师了太师了没入受🤣👍

    2024-08-15 来自 浙江

    1
  • 劳师这是哪一道题啊?

    2024-08-17 来自 北京

    0

热门讨论