社区讨论

求助MLE#5~#10

P5651基础最短路练习题参与者 1已保存回复 0

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
0 条
当前快照
1 份
快照标识符
@lo16x3od
此快照首次捕获于
2023/10/22 16:11
2 年前
此快照最后确认于
2023/11/02 15:48
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n, m, q;
const int rev = 1 << 30;
vector<vector<int>>dp;
signed main()
{
    cin >> n >> m >> q;
    dp.resize(n + 1, vector<int>(n + 1));
    for(int i = 1;i <= n;i ++)
    {
    	for(int j = 1;j <= n;j ++)
    	{
    		if(i != j) dp[i][j] = rev;
    		else dp[i][j] = 0;
		}
	}
    for(int i = 1;i <= m;i ++)
    {
        int x, y, z;
        cin >> x >> y >> z;
        dp[x][y] = z;
        dp[y][x] = z;
    }
    for(int k = 1;k <= n;k ++)
    {
    	for(int i = 1;i <= n;i ++)
	    {
	    	for(int j = 1;j <= n;j ++)
	    	{
	    		if(dp[i][k]==rev||dp[k][j]==rev)continue;
	    		dp[i][j] = min(dp[i][j], dp[i][k] ^ dp[k][j]);
			}
		}
	}
    while (q --)
    {
    	int x, y;
    	cin >> x >> y;
    	cout << dp[x][y] << endl;
	}
    return 0;
}

回复

0 条回复,欢迎继续交流。

正在加载回复...