前三点WA的蒟蒻求助
  • 板块P1342 请柬
  • 楼主LeewayDan
  • 当前回复0
  • 已保存回复0
  • 发布时间2023/12/23 22:12
  • 上次更新2023/12/24 09:36:27
查看原帖
前三点WA的蒟蒻求助
797413
LeewayDan楼主2023/12/23 22:12

前三个点WA了 (全WA或TLE反倒更好改

链式前向星存图的dijkstra,开了longlong

真找不出来错哪里了QAQ

跪求大佬指出错的地方OTL

#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N = 1000005;
const int M = 1000005;
const ll INF = LONG_LONG_MAX;

struct node {
	int to, nxt, val;
} e[M], de[M];

int n, m;
ll ans;
int head1[N], head2[N];
ll dis[N];
bool vis[N];
priority_queue<int, vector<int>, greater<int>> q;

void addEdge(int u, int v, int w) {
	static int cnt = 1;
	e[cnt].val = w;
	e[cnt].to = v;
	e[cnt].nxt = head1[u];
	head1[u] = cnt++;
}
void addEdge1(int u, int v, int w) {
	static int cnt1 = 1;
	de[cnt1].val = w;
	de[cnt1].to = v;
	de[cnt1].nxt = head2[u];
	head2[u] = cnt1++;
}

void Dijkstra(int *h, node *edge) {
	//
	for (int i = 1; i <= n; i++) {
		dis[i] = INF;
		vis[i] = false;
	}
	dis[1] = 0;
	q.push(1);
	//
	while (!q.empty()) {
		int u = q.top();
		q.pop();
		if (vis[u]) continue;
		vis[u] = true;
		for (int i = h[u]; i; i = edge[i].nxt) {
			int v = edge[i].to, w = edge[i].val;
			if (dis[v] > dis[u] + w) {
				dis[v] = dis[u] + w;
				q.push(v);
			}
		}
	}
	//
	for (int i = 1; i <= n; i++){
		if (dis[i] != INF)
			ans += dis[i];
	}
}

int main() {
	//
	scanf("%d %d", &n, &m);
	for (int i = 1; i <= m; i++) {
		int x, y, z;
		scanf("%d %d %d", &x, &y, &z);
		addEdge(x, y, z);
		addEdge1(y, x, z);
	}
	//
	Dijkstra(head1, e);	
	Dijkstra(head2, de);
	//
	printf("%lld\n", ans);

	return 0;
}
2023/12/23 22:12
加载中...