社区讨论

dijkstra90分qwq,求调

P3905道路重建参与者 2已保存回复 1

讨论操作

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

当前回复
1 条
当前快照
1 份
快照标识符
@mdogjhw8
此快照首次捕获于
2025/07/29 19:32
7 个月前
此快照最后确认于
2025/07/30 09:29
7 个月前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;

typedef pair<int, int> pii;
const int N = 110;
int g[N][N];
int n, m, u[N], v[N];
int l[N][N];
int dis[N], vis[N];
void dijkstra(int s)
{
	priority_queue<pii> pq;
	pq.push({0, s});
	dis[s] = 0;
	while (!pq.empty())
	{
		pii pi = pq.top(); pq.pop();
		int u = pi.second;
		vis[u] = true;
		for (int v = 1; v <= n; v++)
		{
			if (g[u][v] == -1) continue;
			if (vis[v]) continue;
			if (dis[u] + g[u][v] < dis[v])
			{
				dis[v] = dis[u] + g[u][v];
				pq.push({-dis[v], v});
			}
		}
	}
}

int main()
{
	memset(g, -1, sizeof g);
	cin >> n >> m;
	for (int i = 1; i <= m; i++)
	{
		cin >> u[i] >> v[i];
		cin >> l[u[i]][v[i]];
		l[v[i]][u[i]] = l[u[i]][v[i]];
		g[u[i]][v[i]] = 0, g[v[i]][u[i]] = 0;
	}
	int d;
	cin >> d;
	for (int i = 1; i <= d; i++)
	{
		int x, y;
		cin >> x >> y;
		g[x][y] = l[x][y], g[y][x] = l[y][x];
	}
	memset(dis, 0x3f, sizeof dis);
	memset(vis, false, sizeof vis);
	int s, t;
	cin >> s >> t;
	dijkstra(s);
	cout << dis[t] << endl;
	return 0;
}
第九个点WA

回复

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

正在加载回复...