蒟蒻次短路模板70分,WA求调,悬关
查看原帖
蒟蒻次短路模板70分,WA求调,悬关
950799
Chiesl楼主2023/10/25 22:56

RT,求助神犇!

#include<bits/stdc++.h>
using namespace std;
#define PII pair<int, int>
struct node {
	int to, nxt, w;
} edge[200002];
int head[5002], tot, dist1[5002], dist2[5002];
bool vis[5002], flag;
void add (int from, int to, int w) {
	edge[++tot].nxt = head[from];
	edge[tot].to = to;
	edge[tot].w = w;
	head[from] = tot;
}
priority_queue<PII, vector<PII>, greater<PII> > q;
int main () {
	memset(dist1, 0x3f, sizeof(dist1));
	memset(dist2, 0x3f, sizeof(dist2));
	int n, r, u, v, w, x;
	scanf("%d%d", &n, &r);
	for (int i = 1; i <= r; i++) {
		scanf("%d%d%d", &u, &v, &w);
		add(u, v, w);
		add(v, u, w);
	}
	dist1[1] = 0;
	q.push(make_pair(0, 1));
	while (!q.empty()) {
		x = q.top().second, q.pop();
		if (vis[x]) continue;		
		vis[x] = true;
		for (int i = head[x]; i; i = edge[i].nxt) {
			flag = false;
			if (dist1[x] + edge[i].w < dist1[edge[i].to]) {
				flag = true;
				dist1[edge[i].to] = dist1[x] + edge[i].w;
			}
			if (dist1[x] + edge[i].w > dist1[edge[i].to] && dist1[x] + edge[i].w < dist2[edge[i].to]) {
				flag = true;
				dist2[edge[i].to] = dist1[x] + edge[i].w;
			}
			if (dist2[x] + edge[i].w < dist2[edge[i].to]) {
				flag = true;
				dist2[edge[i].to] = dist2[x] + edge[i].w;
			}
			if (flag) q.push(make_pair(dist1[edge[i].to], edge[i].to));
		}
	}
	printf("%d", dist2[n]);
	return 0;
}

悬关

2023/10/25 22:56
加载中...