WA求助,套的堆优化Dijkstra正反模板
查看原帖
WA求助,套的堆优化Dijkstra正反模板
735387
songtj楼主2022/9/2 17:28

R.T\mathcal{R} . \mathcal{T}

实际由于没有UVA账号,我做的是另一道一模一样的题

SP50

(话说这几道题恶评也太严重了吧,这两道题就是P1342简单加了个循环啊喂)

不过能水几道蓝题还是很香的


P1342我已经AC,这道题我就是用了P1342的代码改了一小点,但WA了

代码:

#include <bits/stdc++.h>
using namespace std;

int n, m, cnt;
long long ans;
int head[5000010], dis[5000010];
int U[5000010], V[5000010], W[5000010];
priority_queue<pair<int, int>, vector<pair<int, int> >, greater<pair<int, int> > > q;

template <typename _Ip>
inline void read(_Ip &x) {
    char ch = getchar(), sgn = 0; x = 0;
    while (ch ^ '-' && !isdigit(ch)) ch = getchar();
    if (ch == '-') ch = getchar(), sgn = 1;
    while (isdigit(ch)) x = (x<<3)+(x<<1) + (ch^48), ch = getchar();
    if (sgn) x = -x;
}

template <typename _Op>
inline void write(_Op x) {
	if (x < 0) putchar('-'), x = -x;
	if (x > 9) write(x / 10);
	putchar(x % 10 + '0');
}

struct Edge {
	int to;
	int next;
	int w;
} edge[5000010];

inline void add(int u, int v, int w) {
	edge[++cnt].to = v;
	edge[cnt].w = w;
	edge[cnt].next = head[u];
	head[u] = cnt;
}

void Dijkstra(int pos) {
	memset(dis, 0x3f, sizeof(dis));
	dis[pos] = 0;
	q.push(make_pair(0, pos));
	while (!q.empty()) {
		int x = q.top().first, u = q.top().second;
		q.pop();
		if (dis[u] != x) continue;
		for (int i = head[u]; i; i = edge[i].next) {
			if (dis[edge[i].to] > dis[u] + edge[i].w) {
				dis[edge[i].to] = dis[u] + edge[i].w;
				q.push(make_pair(dis[edge[i].to], edge[i].to));
			}
		}
	}
}

void clears() {
	ans = 0;
	n = 0;
	m = 0;
	cnt = 0;
	memset(U, 0, sizeof(U));
	memset(V, 0, sizeof(V));
	memset(W, 0, sizeof(W));
}

int main() {
	int t;
	read(t);
	while (t--) {
		read(n);read(m);
		for (int i = 1; i <= m; ++i) {
			read(U[i]);read(V[i]);read(W[i]);
			add(U[i], V[i], W[i]);
	    }
		Dijkstra(1);
		for (int i = 1; i <= n; ++i) {
			ans += dis[i];
	    }	
		cnt = 0;
		memset(head, 0, sizeof(head));
		for (int i = 1; i <= m; ++i) {
			add(V[i], U[i], W[i]);
	    }
		Dijkstra(1);
		for (int i = 1; i <= n; ++i) {
			ans += dis[i];
	    }
		write(ans);
		putchar('\n');
		//clears();
		ans = 0;
	}
	return 0;
}

是真的不知道哪错了,救救孩子吧

2022/9/2 17:28
加载中...